我正在用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 ...
就像上面的代码一样,我不知道为什么这两个结果有不同的价值? 使用ENVI包我的IDL版本是8.3。
答案 0 :(得分:2)
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