On the other hand, I like his window image : e.g. I understand better how, the further you get from 0, the more your precision goes down, because "bigger windows, divided in the same number of buckets".
So a puzzle: if two positive numbers in exactly the same window are subtracted, what is the worst-case rounding error you can get in the result?
Because, to re-use your argument, the pitfall with many formal definitions is that they are not easily understandable, whose payoff is often not much more than the analogy for the learner, but requires significantly more resources.
So, which would you prefer as an introduction? A "good enough" understanding, or no understanding because the bar of entry was too high?
Just like most floating point numbers
ba dum tss
Just to check, with sbv in haskell, using the Z3 SMT solver:
λ> f (x::SFloat) (y::SFloat) = fpIsNormal x &&& fpIsNormal y &&& y/2 .<= x &&& x .<= 2*y ==> fromSFloat sRNE (x - y) .== (fromSFloat sRNE x :: SDouble) - (fromSFloat sRNE y :: SDouble)
f :: SFloat -> SFloat -> SBool
λ> prove (forAll_ f)
Q.E.D.
Or without rounding through double, using the formula for exact rounding error of a sum: λ> g (x::SFloat) (y::SFloat) = fpIsNormal x &&& fpIsNormal y &&& 0 .<= x &&& y .<= x &&& x .<= 2*y ==> (x - ((x-y) + y)) .== 0
g :: SFloat -> SFloat -> SBool
λ> prove (forAll_ g)
Q.E.D.