私は C++ プログラムを書いていますが、バグを修正するために、メイン プログラムのセクションを別のファイルに分離しました。メイン プログラムをProg1と呼び、別のセクションをProg2と呼びます。
Prog2 のバグを見つけて修正することに成功し、変更を Prog1 にコピーしました。すべてを実行すると、2 つのプログラムは同じ結果IFFを出力します。両方のプログラムで使用している唯一のデータ型は typedouble
です。
精度を上げるためにすべての double を に変更したいと思ってlong double
いましたが、そうすると、Prog1 の出力は Prog2 とは少し異なります。
私の考えでは、Prog1 では long double を使用する特定の計算が行われるのに対し、Prog2 ではリテラルのみを使用することがあるため、これはプロモーションの問題であると考えています。例えば:
プログラム 1:
long double num = 1.0;
value1 = num + 2.0;
プログラム 2:
value2 = 1.0 + 2.0;
value1
との結果value2
が正確に等しくならない場合 (参照:浮動小数点演算は壊れていますか? )。
これで、両方のプログラムのすべてのリテラルをタイプlong double
(例: 1.0L
) に変更して、出力が一致するかどうかを確認できますが、残念ながら、それは言うよりも簡単です (多くのがあります)。
だから私の質問は:
double を使用すると 2 つのプログラムの出力が正確に一致するため、Prog2 が正しく機能している場合、Prog1 が正しく機能していると想定しても安全ですか? long double を使用すると結果は異なりますが?