異なる浮動小数点数2つを減算して0を得ることは可能ですか? 質問する

異なる浮動小数点数2つを減算して0を得ることは可能ですか? 質問する

次の例では、0 (または無限大) による除算が可能ですか?

public double calculation(double a, double b)
{
     if (a == b)
     {
         return 0;
     }
     else
     {
         return 2 / (a - b);
     }
}

もちろん、通常はそうなりません。しかし、aと がb非常に近い場合は、計算の精度によって という結果(a-b)になるのでしょうか?0

この質問は Java に関するものですが、ほとんどのプログラミング言語に当てはまると思います。

ベストアンサー1

Javaでは、がa - bと等しくなることはありません。これは、Javaが非正規化数をサポートするIEEE 754浮動小数点演算を義務付けているためです。0a != bスペック:

特に、Java プログラミング言語では、IEEE 754 の非正規化浮動小数点数と段階的アンダーフローのサポートが必要です。これにより、特定の数値アルゴリズムの望ましい特性の証明が容易になります。計算結果が非正規化数である場合、浮動小数点演算は「ゼロにフラッシュ」されません。

もしFPUで動作します非正規化数異なる数の引き算ではゼロは生じない(掛け算と異なる)。この質問

他の言語の場合は状況によって異なります。たとえば、C または C++ では、IEEE 754 のサポートはオプションです。

そうは言っても、可能です式が2 / (a - b)オーバーフローする場合、たとえばa = 5e-308およびを使用しますb = 4e-308

おすすめ記事