| Alternative 1 | |
|---|---|
| Error | 6.8 |
| Cost | 8384 |
\[\frac{x}{\left(wj + 1\right) \cdot e^{wj}} + \frac{wj \cdot wj - \frac{\frac{wj \cdot wj}{wj + 1}}{wj + 1}}{wj + \frac{wj}{wj + 1}}
\]
(FPCore (wj x) :precision binary64 (- wj (/ (- (* wj (exp wj)) x) (+ (exp wj) (* wj (exp wj))))))
(FPCore (wj x)
:precision binary64
(let* ((t_0 (/ wj (fma wj wj -1.0))))
(+
(+
(fma wj 1.0 (* t_0 (- 1.0 wj)))
(fma (- 1.0 wj) t_0 (* (+ wj -1.0) t_0)))
(/ x (* (+ wj 1.0) (exp wj))))))double code(double wj, double x) {
return wj - (((wj * exp(wj)) - x) / (exp(wj) + (wj * exp(wj))));
}
double code(double wj, double x) {
double t_0 = wj / fma(wj, wj, -1.0);
return (fma(wj, 1.0, (t_0 * (1.0 - wj))) + fma((1.0 - wj), t_0, ((wj + -1.0) * t_0))) + (x / ((wj + 1.0) * exp(wj)));
}
function code(wj, x) return Float64(wj - Float64(Float64(Float64(wj * exp(wj)) - x) / Float64(exp(wj) + Float64(wj * exp(wj))))) end
function code(wj, x) t_0 = Float64(wj / fma(wj, wj, -1.0)) return Float64(Float64(fma(wj, 1.0, Float64(t_0 * Float64(1.0 - wj))) + fma(Float64(1.0 - wj), t_0, Float64(Float64(wj + -1.0) * t_0))) + Float64(x / Float64(Float64(wj + 1.0) * exp(wj)))) end
code[wj_, x_] := N[(wj - N[(N[(N[(wj * N[Exp[wj], $MachinePrecision]), $MachinePrecision] - x), $MachinePrecision] / N[(N[Exp[wj], $MachinePrecision] + N[(wj * N[Exp[wj], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[wj_, x_] := Block[{t$95$0 = N[(wj / N[(wj * wj + -1.0), $MachinePrecision]), $MachinePrecision]}, N[(N[(N[(wj * 1.0 + N[(t$95$0 * N[(1.0 - wj), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(1.0 - wj), $MachinePrecision] * t$95$0 + N[(N[(wj + -1.0), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(x / N[(N[(wj + 1.0), $MachinePrecision] * N[Exp[wj], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\begin{array}{l}
t_0 := \frac{wj}{\mathsf{fma}\left(wj, wj, -1\right)}\\
\left(\mathsf{fma}\left(wj, 1, t_0 \cdot \left(1 - wj\right)\right) + \mathsf{fma}\left(1 - wj, t_0, \left(wj + -1\right) \cdot t_0\right)\right) + \frac{x}{\left(wj + 1\right) \cdot e^{wj}}
\end{array}
| Original | 13.4 |
|---|---|
| Target | 12.9 |
| Herbie | 6.8 |
Initial program 13.4
Simplified12.9
Applied egg-rr6.8
Applied egg-rr6.8
Simplified6.8
Final simplification6.8
| Alternative 1 | |
|---|---|
| Error | 6.8 |
| Cost | 8384 |
| Alternative 2 | |
|---|---|
| Error | 6.8 |
| Cost | 7360 |
| Alternative 3 | |
|---|---|
| Error | 17.3 |
| Cost | 7104 |
| Alternative 4 | |
|---|---|
| Error | 12.9 |
| Cost | 7104 |
herbie shell --seed 2022334
(FPCore (wj x)
:name "Jmat.Real.lambertw, newton loop step"
:precision binary64
:herbie-target
(- wj (- (/ wj (+ wj 1.0)) (/ x (+ (exp wj) (* wj (exp wj))))))
(- wj (/ (- (* wj (exp wj)) x) (+ (exp wj) (* wj (exp wj))))))