[解決済み] 2つの不等な浮動小数点数の引き算で0を得ることは可能ですか?
2022-07-04 01:42:01
質問
以下の例で、0(または無限大)による除算は可能でしょうか?
public double calculation(double a, double b)
{
if (a == b)
{
return 0;
}
else
{
return 2 / (a - b);
}
}
通常の場合、もちろんそれはありません。しかし、もし
a
と
b
が非常に近い場合
(a-b)
であることになる。
0
になるのは、計算の精度のせいでしょうか?
なお、この質問はJavaのものですが、ほとんどのプログラミング言語に適用されると思います。
どのように解決するのですか?
Javaでは
a - b
とは決して等しくありません。
0
もし
a != b
. これは、Javaが非正規化された数をサポートするIEEE 754浮動小数点演算を義務付けているためです。から
スペック
:
特に、Java プログラミング言語では、IEEE 754 非正規化浮動小数点数および漸進的アンダーフローのサポートが必要であり、これにより特定の数値アルゴリズムの望ましい特性を容易に証明することができるようになります。浮動小数点演算は、計算結果が非正規化された数である場合、ゼロにフラッシュされません。
もし FPU で動作する 非正規化された数値 で動作し、不等号の引き算は(掛け算と違って)決してゼロを生成しない、また この質問 .
他の言語については、それは依存します。例えばCやC++では、IEEE754のサポートはオプションです。
とはいえ
は可能です
という表現に対して
2 / (a - b)
をオーバーフローさせることができます。
a = 5e-308
と
b = 4e-308
.
関連
-
[解決済み】Lisp: なぜ (- 1e16 1) は 999999999999 ではなく 1000000000000 になるのでしょうか?
-
[解決済み] コアOCamlにおける浮動小数点数の絶対値
-
[解決済み] 除算を強制的に浮動小数点にするにはどうしたらいいですか?除算は0に切り捨てられ続けますか?
-
[解決済み] JavaScriptで浮動小数点数の精度を扱うには?
-
[解決済み] 浮動小数点以下の0を削除して文字列に変換する方法
-
[解決済み】浮動小数点値の比較はどのくらい危険か?
-
[解決済み】IEEE754のNaN値に対して、すべての比較がfalseを返す根拠は何ですか?
-
[解決済み] 単精度浮動小数点演算と倍精度浮動小数点演算はどう違うのですか?
-
[解決済み] なぜNaNはNaNと等しくないのですか?[重複あり]
-
[解決済み] 2つの不等な浮動小数点数の引き算で0を得ることは可能ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン