| Alternative 1 | |
|---|---|
| Error | 50.8 |
| Cost | 6848 |
\[\log \left(1 + \frac{x - lo}{hi}\right)
\]
(FPCore (lo hi x) :precision binary64 (/ (- x lo) (- hi lo)))
(FPCore (lo hi x) :precision binary64 (log (* (- 1.0 (/ lo hi)) (exp (/ x hi)))))
double code(double lo, double hi, double x) {
return (x - lo) / (hi - lo);
}
double code(double lo, double hi, double x) {
return log(((1.0 - (lo / hi)) * exp((x / hi))));
}
real(8) function code(lo, hi, x)
real(8), intent (in) :: lo
real(8), intent (in) :: hi
real(8), intent (in) :: x
code = (x - lo) / (hi - lo)
end function
real(8) function code(lo, hi, x)
real(8), intent (in) :: lo
real(8), intent (in) :: hi
real(8), intent (in) :: x
code = log(((1.0d0 - (lo / hi)) * exp((x / hi))))
end function
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.log(((1.0 - (lo / hi)) * Math.exp((x / hi))));
}
def code(lo, hi, x): return (x - lo) / (hi - lo)
def code(lo, hi, x): return math.log(((1.0 - (lo / hi)) * math.exp((x / hi))))
function code(lo, hi, x) return Float64(Float64(x - lo) / Float64(hi - lo)) end
function code(lo, hi, x) return log(Float64(Float64(1.0 - Float64(lo / hi)) * exp(Float64(x / hi)))) end
function tmp = code(lo, hi, x) tmp = (x - lo) / (hi - lo); end
function tmp = code(lo, hi, x) tmp = log(((1.0 - (lo / hi)) * exp((x / hi)))); end
code[lo_, hi_, x_] := N[(N[(x - lo), $MachinePrecision] / N[(hi - lo), $MachinePrecision]), $MachinePrecision]
code[lo_, hi_, x_] := N[Log[N[(N[(1.0 - N[(lo / hi), $MachinePrecision]), $MachinePrecision] * N[Exp[N[(x / hi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\frac{x - lo}{hi - lo}
\log \left(\left(1 - \frac{lo}{hi}\right) \cdot e^{\frac{x}{hi}}\right)
Results
Initial program 62.0
Taylor expanded in hi around inf 52.0
Applied egg-rr52.0
Applied egg-rr52.0
Taylor expanded in lo around 0 50.8
Simplified50.8
Final simplification50.8
| Alternative 1 | |
|---|---|
| Error | 50.8 |
| Cost | 6848 |
| Alternative 2 | |
|---|---|
| Error | 51.6 |
| Cost | 448 |
| Alternative 3 | |
|---|---|
| Error | 52.0 |
| Cost | 320 |
| Alternative 4 | |
|---|---|
| Error | 52.0 |
| Cost | 256 |
| Alternative 5 | |
|---|---|
| Error | 52.1 |
| Cost | 64 |

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