The binary search controversy has improperly gone from the definition of numbers in poorly designed languages to the "static vs. dynamic" debate, which has no bearing on this topic. Then the question came up about floating point and why even Smalltalk accepts that 1e16 + 1
is equal to 1e16
when using a floating point (i.e. inexact) representation of integers.
The numerical tower in Scheme explicitly defines what number representations and procedures deal with exact or with inexact math. You get to choose, for instance based on whether you need speed or accuracy.
> (+ 2/3 1/3) 1 > exact->inexact #inexact> > (exact->inexact 1/3) .3333333333333333 > (= (+ 1 10000000000000000) (+ 1 (exact->inexact 10000000000000000))) #f > (= 1e16 (exact->inexact 10000000000000000)) #t