为什么 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
我正在用 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