Average Error: 64.0 → 51.7
Time: 3.3s
Precision: binary64
\[lo < -1 \cdot 10^{+308} \land hi > 10^{+308}\]
\[[lo, hi, x] = \mathsf{sort}([lo, hi, x]) \\]
\[\frac{x - lo}{hi - lo} \]
\[-1 \cdot \frac{x}{lo} \]
\frac{x - lo}{hi - lo}
-1 \cdot \frac{x}{lo}
(FPCore (lo hi x) :precision binary64 (/ (- x lo) (- hi lo)))
(FPCore (lo hi x) :precision binary64 (* -1.0 (/ x lo)))
double code(double lo, double hi, double x) {
	return (x - lo) / (hi - lo);
}
double code(double lo, double hi, double x) {
	return -1.0 * (x / lo);
}

Error

Bits error versus lo

Bits error versus hi

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 64.0

    \[\frac{x - lo}{hi - lo} \]
  2. Taylor expanded in x around inf 51.7

    \[\leadsto \color{blue}{\frac{x}{hi - lo}} \]
  3. Taylor expanded in hi around 0 51.7

    \[\leadsto \color{blue}{-1 \cdot \frac{x}{lo}} \]
  4. Final simplification51.7

    \[\leadsto -1 \cdot \frac{x}{lo} \]

Reproduce

herbie shell --seed 2022127 
(FPCore (lo hi x)
  :name "(/ (- x lo) (- hi lo))"
  :precision binary64
  :pre (and (< lo -1e+308) (> hi 1e+308))
  (/ (- x lo) (- hi lo)))