1

私は 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 を使用すると結果は異なりますが?

4

0 に答える 0