0

我正在使用 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 包。

4

1 回答 1

2

TriscalJM 是正确的。如果您查看第二个表达式中的括号,则您对术语的分组方式不同。任何计算机语言中的浮点运算总是会发生这种情况,只是由于舍入错误。如果您想了解更多信息,可以咨询: 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
于 2016-04-06T02:25:02.293 回答