1. ホーム
  2. c#

[解決済み] 浮動小数点値が0と等しいかどうかをチェックするのは安全ですか?

2022-12-13 01:24:05

質問

double型やdecimal型の値同士の等式は通常当てにならないことは知っていますが、0は特殊なケースなのでしょうか?

0.00000000000001と0.00000000000002の間の不正確さは理解できますが、0自体はただの無なので混乱するのはかなり難しいようです。 何もないところで不正確であれば、それはもう何もないのではありません。

でも、この話題はよく知らないので、私が言うことではありません。

double x = 0.0;
return (x == 0.0) ? true : false;

これは常に真を返すのでしょうか?

どのように解決するのですか?

それは 安全 を返すと予想します。 true を返すと期待できます。 0.0 という値を持つ場合のみです (元のコードでは、もちろんそうなっています)。これは == 演算子のセマンティクスと一致しています。 a == b は " を意味する。 a とは b となります。

それは 安全ではない (それは 正しくない というのは、純粋な数学で同じ計算をした結果がゼロであれば、倍精度(あるいはより一般的には浮動小数点)算術でもゼロになると期待することはできないからです。これは、計算が地に落ちたとき、浮動小数点精度の誤差が現れるためで、数学の実数演算には存在しない概念です。