Почему 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
Другие вопросы по тегам