Thanks to everybody that contributed - I learned something new which I will not forget soon. /* USING FLOATING-POINT (I.E., REAL BINARY) REPRESENTATION THERE HAPPENS TO BE NO EXACT BINARY REPRESENTATION FOR THE DECIMAL VALUES OF 0.1 AND 0.3 3 EXAMPLES BELOW references: http://analytics.ncsu.edu/sesug/2008/PO-082.pdf SAS(R) 9.4 Language Reference: Concepts, Fourth Edition 31560 - Choosing your degree of numeric precision */ ================================================================== ** EXAMPLE USING 0.1 - THIS IS NOT ACCURATE **; data _null_; x=10.1; put "ORIGINAL VALUE:"; put x= 32.30; put x= hex16.; y=10; newx=(x+y)-y; put / "ORIGINAL VALUE AFTER ADDING AND SUBTRACTING 10:"; put newx= 32.30; put newx= hex16.; put / "DIFFERENCE AFTER ADDING AND SUBTRACTING 10:"; diff=x-newx; put diff= 32.30; put diff= hex16.; run; LOG OUTPUT: ORIGINAL VALUE: x=10.10000000000000000000000000000 x=4024333333333333 ORIGINAL VALUE AFTER ADDING AND SUBTRACTING 10: newx=10.10000000000000000000000000000 newx=4024333333333334 DIFFERENCE AFTER ADDING AND SUBTRACTING 10: diff=-.000000000000001776356839400250 diff=BCE0000000000000 ================================================================== ** EXAMPLE USING 0.3 - THIS IS NOT ACCURATE **; data _null_; format ExactVar BinaryVar hex16.; * LOGICALLY THESE ARE THE SAME VALUE *; ExactVar=0.3; BinaryVar=3*0.1; Diff=ExactVar-BinaryVar; * BUT THEY ARE STORED DIFFERENTLY IN HEX/BINARY *; put ExactVar= BinaryVar= Diff= 32.30; run; LOG OUTPUT: ExactVar=3FD3333333333333 BinaryVar=3FD3333333333334 Diff=-.000000000000000055511151231258 ================================================================== ** EXAMPLE USING 0.2 - THIS IS ACCURATE **; data _null_; format ExactVar BinaryVar hex16.; * LOGICALLY THESE ARE THE SAME VALUE *; ExactVar=0.2; BinaryVar=2*0.1; Diff=ExactVar-BinaryVar; * BUT THEY ARE STORED DIFFERENTLY IN HEX/BINARY *; put ExactVar= BinaryVar= Diff= 32.30; run; LOG OUTPUT: ExactVar=3FC999999999999A BinaryVar=3FC999999999999A Diff=0.000000000000000000000000000000 ==================================================================
... View more