为什么 IDL 在同一个表达式中有不同的值?

Why IDL have different value in same expression?

我正在用 IDL 做一些图像处理,它需要高精度。 但是当我调试同事的程序时,我发现了一些奇怪的地方:

IDL> lat,y_res
   45.749001
   0.00026999999
IDL> lat - findgen(10)*y_res + y_res * 0.5 + findgen(10)*y_res + y_res * 0.5
   45.749268       45.749268       45.749268       45.749268 ...      45.749268
IDL> lat - (findgen(10)*y_res + y_res * 0.5) + (findgen(10)*y_res + y_res * 0.5)
   45.749001       45.749001       45.749001       45.749001 ...

如上代码,不知道为什么两个结果的值不一样? 我的 IDL 版本是 8.3,带有 ENVI 包。

TriskalJM 是正确的。如果您查看第二个表达式中的括号,就会发现您对术语进行了不同的分组。这将 总是 在任何计算机语言的浮点运算中发生,只是由于舍入误差。如果您想了解更多信息,可以咨询: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

同时,我建议您切换到双精度:

lat - dindgen(10)*y_res + y_res * 0.5 + dindgen(10)*y_res + y_res * 0.5