(FPCore (lo hi x) :precision binary64 (/ (- x lo) (- hi lo)))
(FPCore (lo hi x) :precision binary64 (* (* (pow (/ 1.0 (cbrt (/ lo hi))) 2.0) (/ (cbrt (/ hi lo)) lo)) (- hi x)))
double code(double lo, double hi, double x) {
return (x - lo) / (hi - lo);
}
double code(double lo, double hi, double x) {
return (pow((1.0 / cbrt((lo / hi))), 2.0) * (cbrt((hi / lo)) / lo)) * (hi - x);
}
public static double code(double lo, double hi, double x) {
return (x - lo) / (hi - lo);
}
public static double code(double lo, double hi, double x) {
return (Math.pow((1.0 / Math.cbrt((lo / hi))), 2.0) * (Math.cbrt((hi / lo)) / lo)) * (hi - x);
}
function code(lo, hi, x) return Float64(Float64(x - lo) / Float64(hi - lo)) end
function code(lo, hi, x) return Float64(Float64((Float64(1.0 / cbrt(Float64(lo / hi))) ^ 2.0) * Float64(cbrt(Float64(hi / lo)) / lo)) * Float64(hi - x)) end
code[lo_, hi_, x_] := N[(N[(x - lo), $MachinePrecision] / N[(hi - lo), $MachinePrecision]), $MachinePrecision]
code[lo_, hi_, x_] := N[(N[(N[Power[N[(1.0 / N[Power[N[(lo / hi), $MachinePrecision], 1/3], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(N[Power[N[(hi / lo), $MachinePrecision], 1/3], $MachinePrecision] / lo), $MachinePrecision]), $MachinePrecision] * N[(hi - x), $MachinePrecision]), $MachinePrecision]
\frac{x - lo}{hi - lo}
\left({\left(\frac{1}{\sqrt[3]{\frac{lo}{hi}}}\right)}^{2} \cdot \frac{\sqrt[3]{\frac{hi}{lo}}}{lo}\right) \cdot \left(hi - x\right)



Bits error versus lo



Bits error versus hi



Bits error versus x
Results
Initial program 62.0
Taylor expanded in lo around inf 64.0
Simplified51.9
Taylor expanded in lo around 0 64.0
Simplified51.5
Applied egg-rr51.5
Applied egg-rr51.5
Final simplification51.5
herbie shell --seed 2022151
(FPCore (lo hi x)
:name "(/ (- x lo) (- hi lo))"
:precision binary64
:pre (and (< lo -1e+308) (> hi 1e+308))
(/ (- x lo) (- hi lo)))