How It Works

The Essential Requirements

  • You are comfortable working with all input data as Float32s.
  • You are comfortable reporting all the results using Float32s.
  • You respect Robust32 values (just let them work, no peeking).

The Pervasive Conventions

  • any information introduced to the computation is converted to Float32s.
  • programmed calculations and computations are performed using Float64s.
  • all information retrieved from the computation is converted to Float32s.

Why It Works

An old Rule-of-Thumb offers the simplest way to evade numerical embarrassment. Perform your compututations carrying somewhat more than twice the precision of your data and somewhat more than twice the precision of you seek in your results. This rule has long served statistics, optimization, root-finding, geometry, and differential equations. Rare exceptions exist, of course. (W. Kahan, amended)

This package implements that Rule-of-Thumb in a highly performant manner. We work from Float32 data and provide Float32 results. Float64s have 2x + 5 more significant bits than Float32s. Internally, Float64 math is used. This happens automatically, when you use the exported type[s]. So, all is well.