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