0

I'm doing some image processing with IDL, and it required a high-precision. But when I debug my colleague's program, I find some thing strange:

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 ...

Just as code above, I don't know why the two results have different value? My IDL version is 8.3 with ENVI package.

veda905
  • 782
  • 2
  • 12
  • 32
Nico
  • 403
  • 3
  • 8
  • The two results have different values because you're changing the order of operations. Your two commands are not equivalent. – TriskalJM Apr 05 '16 at 16:20

1 Answers1

2

TriskalJM is correct. If you look at your parentheses in the second expression, you are grouping your terms differently. This will always happen with floating-point arithmetic in any computer language, just due to roundoff errors. If you want a more information, you could consult: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

In the meantime, I would recommend that you switch to double-precision:

lat - dindgen(10)*y_res + y_res * 0.5 + dindgen(10)*y_res + y_res * 0.5
Chris Torrence
  • 452
  • 3
  • 11