/ fp:fast vs:fp:我能遇到什么样的错误?

时间:2011-07-31 12:39:18

标签: c++ floating-accuracy

我想知道如果我设置/ fp:fast而不是fp,我会遇到什么样的错误:精确? 我在MSV10下工作

我执行/,*,+, - 双倍操作,最大数字等于8,如1.4379294(货币汇率)。

1 个答案:

答案 0 :(得分:7)

计算总是会得到相同的错误:将结果转换为十进制后,您永远不会超过15位有效数字,其余的只是随机噪声数字。 / fp:fast和/ fp:precise之间的差异就是那些噪声数字。

/ fp:precision选项解决了x86 FPU的问题,它将中间结果以80位精度存储在FPU寄存器中。如果中间值保存在寄存器中,则可能导致微妙的不同噪声数字值。使用/ fp:precise,代码生成器被强制将这些值刷新回内存,将它们截断回64位。这很慢,但会产生更一致的噪音。如果您承诺在没有epsilon的情况下比较浮点值是否正确,那就更为重要了。

对于大多数会计师而言,使用数学库计算10个手指而非2个是一个常见的解决方案。通过消除将数字从基数10转换为基数2时生成的数据来解决噪声数问题。代码速度慢,比fp慢得多:精确,因为所有计算都是在没​​有硬件加速的软件中进行的。但通常不是会计应用中的问题。