$fp1 = 1.9041105342991877e+258;; $change = $fp1 - 1.9041105342991876e+258; ## note change from 7 to 6 in the last digit of the number being subtracted printf "% 25.17g\n% 25.17g\n", $fp1, $change;; 1.9041105342991886e+258 0 ## no change $change = $fp1 - 1.9041105342991875e+258; printf "% 25.17g\n% 25.17g\n", $fp1, $change;; ## note change from 7 to 5 in last digit 1.9041105342991886e+258 0 ## no change $change = $fp1 - 1.9041105342991874e+258; ## note change from 7 to 4 in last digit printf "% 25.17g\n% 25.17g\n", $fp1, $change;; 1.9041105342991886e+258 2.1337646185215534e+242 ## A change! ### 1 ### ## Now try the increment instead of decrement $change = $fp1 - 1.9041105342991878e+258; ## note change from 7 to 8 in last digit printf "% 25.17g\n% 25.17g\n", $fp1, $change;; 1.9041105342991886e+258 -2.1337646185215534e+242 ## A change straight away! ### 2 ### ##### Note that whilst the sign of the change at ### 1 ### & ### 2 ### is different, the absolute value is the same. #### $fp2 = -8.2727285363069939e-293;; printf "% 25.17g\n", $fp2;; -7.9999999999999948e-293 ### WTF? ###