\frac{x - lo}{hi - lo}
\begin{array}{l}
t_0 := \frac{x}{hi} - 1\\
t_1 := \sqrt[3]{\frac{lo \cdot t_0}{hi}}\\
\left(t_1 \cdot t_1\right) \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\sqrt[3]{t_0 \cdot \frac{lo}{hi}}\right)\right)
\end{array}
(FPCore (lo hi x) :precision binary64 (/ (- x lo) (- hi lo)))
(FPCore (lo hi x) :precision binary64 (let* ((t_0 (- (/ x hi) 1.0)) (t_1 (cbrt (/ (* lo t_0) hi)))) (* (* t_1 t_1) (log1p (expm1 (cbrt (* t_0 (/ lo hi))))))))
double code(double lo, double hi, double x) {
return (x - lo) / (hi - lo);
}
double code(double lo, double hi, double x) {
double t_0 = (x / hi) - 1.0;
double t_1 = cbrt((lo * t_0) / hi);
return (t_1 * t_1) * log1p(expm1(cbrt(t_0 * (lo / hi))));
}



Bits error versus lo



Bits error versus hi



Bits error versus x
Results
Initial program 62.0
Taylor expanded around 0 58.0
Simplified52.0
Taylor expanded around inf 52.0
Simplified52.0
rmApplied add-cube-cbrt_binary6452.0
Simplified52.0
Simplified52.0
rmApplied log1p-expm1-u_binary6452.0
Simplified52.0
Final simplification52.0
herbie shell --seed 2021211
(FPCore (lo hi x)
:name "(/ (- x lo) (- hi lo))"
:precision binary64
:pre (and (< lo -1e+308) (> hi 1e+308))
(/ (- x lo) (- hi lo)))