在不涉及不必要的细节的情况下,基于相同的输入,浮点数(x86_64)上的运算是否有可能返回其结果的微小变化?哪怕有一点点不同?
我正在模拟一个基本混沌的系统,我希望数据的微小变化会产生明显的影响。然而我预计,使用相同的数据,程序的行为将被修复。不是这种情况。每次运行程序时我都会看到明显但可以接受的差异。
我想我在某处留下了一些未初始化的变量......
我使用的语言是 C++ 和 Python。
ANSWER
拉塞尔的回答是正确的。浮点运算是确定性的。不确定性是由悬空指针引起的。
是的,这是可能的。引用自C++ 常见问题解答:
事实证明,在某些安装中,即使 x == y,cos(x) != cos(y) 也是如此。这不是一个错字;如果您不感到震惊,请再读一遍:某个事物的余弦可能不等于同一事物的余弦。 (或者正弦,或者正切,或者对数,或者任何其他浮点计算。)
Why?
[F] 浮点计算和比较通常由通常包含特殊寄存器的特殊硬件执行,并且这些寄存器通常具有比双精度更多的位。这意味着中间浮点计算通常具有比 sizeof(double) 更多的位,并且当浮点值写入 RAM 时,它通常会被截断,通常会丢失一些精度位。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)