Почему IDL имеют разные значения в одном выражении?
Я делаю некоторую обработку изображений с 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.
1 ответ
Решение
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