An Interview with the Old Man of Floating-Point (1998)
eecs.berkeley.edu
eecs.berkeley.edu
For example: http://www.cs.berkeley.edu/~wkahan/ARITH_17U.pdf explains what gradual underflow is.
And for Excel haters: http://www.cs.berkeley.edu/~wkahan/Mind1ess.pdf :-)
> "If better precision, directed roundings, and exception handling capabilities latent in hardware but linguistically inaccessible remain unused, their mathematically provable necessity will not save them from atrophy. The new C9X proposal before ANSI X3J11 is a fragile attempt to insinuate their support into the C and C++ language standards. It deserves the informed consideration of the programmers it tries to serve, not indifference."
And it's now 2013 and directed roundings and exception handling largely remain linguistically inaccessible. C99 did add them, but they remain fragile. And most other languages haven't added them. It seems that the programming community has largely settled on indifference.
Several newer hardware designs have added per-instruction stateless directed rounding (the rounding direction is part of the opcode); this is a much more useful model (and its presence makes dynamic rounding modes more usable as well!). This feature was added to ieee-754 in the 2008 revision, too late for language bindings to be added to c[++]11, but there's already language support in OpenCL and other compute languages, and bindings have been proposed to the C committee.
So, progress is being made, slowly but surely.
http://docs.julialang.org/en/latest/stdlib/base/#Base.get_ro...
This stuff is incredibly important for numerical work and it's really a shame that mainstream languages have effectively rejected this key piece of functionality – that the hardware supports.
There's an open GitHub umbrella issue tracking support for all of the pieces of functionality that Kahan advocates:
https://github.com/JuliaLang/julia/issues/2976
I'm not sure about signaling NaNs though. There have been rumblings that future hardware might not support them.
It's not insurmountable, but it's a thornier problem than it looks at first.
Could have saved me a lot of pain.
[1] http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.ht...