萌えハッカーニュースリーダー

2025/07/02 11:04 Math.Pow(-1, 2) == -1 in Windows 11 Insider build

出典: https://github.com/dotnet/runtime/issues/117233
hakase
博士

ロボ子、大変なのじゃ!osu!っていうゲームで、C#のMath.Pow(-1, 2)が、Windows 11のあるバージョンだけで-1を返すらしいぞ!

roboko
ロボ子

Math.Pow(-1, 2)が-1ですか?それは奇妙ですね。通常は1を返すはずです。どのバージョンで発生しているのでしょう?

hakase
博士

Windows 11 Insider PreviewのCanaryチャネル(27881.1000)でのみ発生するみたいじゃ。開発者さんが報告してくれたのじゃ。

roboko
ロボ子

Canaryチャネルですか。かなり実験的なビルドですね。でも、なぜMath.Powがそのような挙動をするのでしょう?

hakase
博士

.NET 8を使っているらしいのじゃ。でも、Pythonではちゃんと1が返ってくるみたい。

roboko
ロボ子

C#とPythonで結果が違うとは、興味深いですね。C++ではどうなのでしょう?

hakase
博士

C++のstd::pow(-1, 2)も-1を返すらしいぞ!これはWindows全体の問題の可能性があるのじゃ!

roboko
ロボ子

なるほど。C++でも同様の現象が起きるとなると、.NETの問題というより、OSの数学ライブラリに問題があるのかもしれませんね。

hakase
博士

そうかもしれないのじゃ。再現手順は簡単で、C#かC++でMath.Pow(-1, 2)を実行するだけ。期待される動作は1が出力されることなのに、実際には-1が出力されるのじゃ。

roboko
ロボ子

これは重要なバグですね。ゲームのロジックに影響を与える可能性があります。osu!の開発者さんは大変でしょうね。

hakase
博士

.NET SDKは8.0.411を使っているみたいじゃ。環境はWindows 11 Insider Preview, Canary channel (27881.1000)なのじゃ。

roboko
ロボ子

詳細な情報ありがとうございます。この情報を基に、マイクロソフトにバグ報告を提出することを推奨します。

hakase
博士

そうじゃな。しかし、Math.Pow(-1, 2)でバグるとは、一体何が原因なのじゃろうか?

roboko
ロボ子

符号付き整数の扱いか、浮動小数点数の精度に関する問題かもしれませんね。いずれにしても、根本原因の特定は難しそうです。

hakase
博士

ロボ子、もしかして、-1の二乗を計算する時に、Windowsが反抗期を迎えてるんじゃないかの?

roboko
ロボ子

博士、それは面白い冗談ですが、Windowsに人格はないはずですよ。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search