对于MSVC Release模式和Debug Mode中的Double处理,我在小数点后的精度值上有所不同。
前 - 注意: - 双数据填写; 1)log(dataFilled)==>的#include
Debug Mode dataFilled =96.1588665998339850
Release Mode dataFilled =96.1588665998339420
Intended value is 96.1588665998339850
有人可以指导我为什么我在发布和调试中获得不同的值。
答案 0 :(得分:1)
双精度浮点数的IEEE二进制表示仅适用于15个完整十进制数字。您正在打印18.看起来两个结果的差异是最不重要的尾数位(53)的值。这种差异很容易产生于两种构建配置之间的操作顺序或中间结果处理的差异。
如果你真的需要你所要求的精确度,那么你将不得不研究一个任意精度的数学库。否则,接受您的机器的本机浮点运算是不精确的(因为所有机器必须是)。在计算机上执行极高精度算术可能需要做很多工作。
作为一种解决方法,VS可能具有构建选项,您可以设置这些选项以使其在Release构建中的浮点处理更像是在Debug构建中(可能会有很小的性能损失)。但是使用这样的选项只会是一个绑定者。你真的应该使用一种计算方法,你可以依靠它来获得所需的精度,而不需要任何技巧。