我正在编写一个 C++ 程序,并试图修复一个错误,我已将我的主程序的一部分隔离到一个单独的文件中。我将调用主程序Prog1和分离的部分Prog2。
我已经成功地找到并修复了 Prog2 中的错误,并将更改复制到 Prog1。当我运行所有程序时,两个程序输出相同的结果IFF我在两个程序中使用的唯一数据类型是 type double
。
我希望将所有双打更改long double
为提高精度,但这样做时,Prog1 的输出与 Prog2 略有不同。
我的想法是这是一个提升问题,因为 Prog1 中的某些计算使用长双精度数,而在 Prog2 中我偶尔只使用文字。例如:
程序1:
long double num = 1.0;
value1 = num + 2.0;
程序2:
value2 = 1.0 + 2.0;
value1
和的结果value2
将不完全相等(请参阅:浮点数学是否损坏?)。
现在我可以将两个程序中的每个文字都更改为类型long double
(例如1.0L
),然后查看输出是否匹配,但不幸的是,说起来容易做起来难(有很多)。
所以我的问题是:
由于我的两个程序的输出在使用双打时完全匹配,如果 Prog2 是,那么假设 Prog1 正常运行是否安全?即使使用长双打时结果不同?