| Alternative 1 | |
|---|---|
| Error | 99.0% |
| Cost | 33604.00 |
(FPCore (wj x) :precision binary64 (- wj (/ (- (* wj (exp wj)) x) (+ (exp wj) (* wj (exp wj))))))
(FPCore (wj x)
:precision binary64
(let* ((t_0 (- 1.0 (* wj wj))))
(if (<= wj -6e-7)
(+ wj (/ (- (/ x (exp wj)) wj) (+ wj 1.0)))
(if (<= wj 0.00027)
(- (+ (* wj wj) (+ x (* -2.0 (* wj x)))) (pow wj 3.0))
(+ (/ (* wj wj) t_0) (- wj (/ wj t_0)))))))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 = 1.0 - (wj * wj);
double tmp;
if (wj <= -6e-7) {
tmp = wj + (((x / exp(wj)) - wj) / (wj + 1.0));
} else if (wj <= 0.00027) {
tmp = ((wj * wj) + (x + (-2.0 * (wj * x)))) - pow(wj, 3.0);
} else {
tmp = ((wj * wj) / t_0) + (wj - (wj / t_0));
}
return tmp;
}
real(8) function code(wj, x)
real(8), intent (in) :: wj
real(8), intent (in) :: x
code = wj - (((wj * exp(wj)) - x) / (exp(wj) + (wj * exp(wj))))
end function
real(8) function code(wj, x)
real(8), intent (in) :: wj
real(8), intent (in) :: x
real(8) :: t_0
real(8) :: tmp
t_0 = 1.0d0 - (wj * wj)
if (wj <= (-6d-7)) then
tmp = wj + (((x / exp(wj)) - wj) / (wj + 1.0d0))
else if (wj <= 0.00027d0) then
tmp = ((wj * wj) + (x + ((-2.0d0) * (wj * x)))) - (wj ** 3.0d0)
else
tmp = ((wj * wj) / t_0) + (wj - (wj / t_0))
end if
code = tmp
end function
public static double code(double wj, double x) {
return wj - (((wj * Math.exp(wj)) - x) / (Math.exp(wj) + (wj * Math.exp(wj))));
}
public static double code(double wj, double x) {
double t_0 = 1.0 - (wj * wj);
double tmp;
if (wj <= -6e-7) {
tmp = wj + (((x / Math.exp(wj)) - wj) / (wj + 1.0));
} else if (wj <= 0.00027) {
tmp = ((wj * wj) + (x + (-2.0 * (wj * x)))) - Math.pow(wj, 3.0);
} else {
tmp = ((wj * wj) / t_0) + (wj - (wj / t_0));
}
return tmp;
}
def code(wj, x): return wj - (((wj * math.exp(wj)) - x) / (math.exp(wj) + (wj * math.exp(wj))))
def code(wj, x): t_0 = 1.0 - (wj * wj) tmp = 0 if wj <= -6e-7: tmp = wj + (((x / math.exp(wj)) - wj) / (wj + 1.0)) elif wj <= 0.00027: tmp = ((wj * wj) + (x + (-2.0 * (wj * x)))) - math.pow(wj, 3.0) else: tmp = ((wj * wj) / t_0) + (wj - (wj / t_0)) return tmp
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(1.0 - Float64(wj * wj)) tmp = 0.0 if (wj <= -6e-7) tmp = Float64(wj + Float64(Float64(Float64(x / exp(wj)) - wj) / Float64(wj + 1.0))); elseif (wj <= 0.00027) tmp = Float64(Float64(Float64(wj * wj) + Float64(x + Float64(-2.0 * Float64(wj * x)))) - (wj ^ 3.0)); else tmp = Float64(Float64(Float64(wj * wj) / t_0) + Float64(wj - Float64(wj / t_0))); end return tmp end
function tmp = code(wj, x) tmp = wj - (((wj * exp(wj)) - x) / (exp(wj) + (wj * exp(wj)))); end
function tmp_2 = code(wj, x) t_0 = 1.0 - (wj * wj); tmp = 0.0; if (wj <= -6e-7) tmp = wj + (((x / exp(wj)) - wj) / (wj + 1.0)); elseif (wj <= 0.00027) tmp = ((wj * wj) + (x + (-2.0 * (wj * x)))) - (wj ^ 3.0); else tmp = ((wj * wj) / t_0) + (wj - (wj / t_0)); end tmp_2 = tmp; 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[(1.0 - N[(wj * wj), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[wj, -6e-7], N[(wj + N[(N[(N[(x / N[Exp[wj], $MachinePrecision]), $MachinePrecision] - wj), $MachinePrecision] / N[(wj + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[wj, 0.00027], N[(N[(N[(wj * wj), $MachinePrecision] + N[(x + N[(-2.0 * N[(wj * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[Power[wj, 3.0], $MachinePrecision]), $MachinePrecision], N[(N[(N[(wj * wj), $MachinePrecision] / t$95$0), $MachinePrecision] + N[(wj - N[(wj / t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\begin{array}{l}
t_0 := 1 - wj \cdot wj\\
\mathbf{if}\;wj \leq -6 \cdot 10^{-7}:\\
\;\;\;\;wj + \frac{\frac{x}{e^{wj}} - wj}{wj + 1}\\
\mathbf{elif}\;wj \leq 0.00027:\\
\;\;\;\;\left(wj \cdot wj + \left(x + -2 \cdot \left(wj \cdot x\right)\right)\right) - {wj}^{3}\\
\mathbf{else}:\\
\;\;\;\;\frac{wj \cdot wj}{t_0} + \left(wj - \frac{wj}{t_0}\right)\\
\end{array}
Results
| Original | 79.1% |
|---|---|
| Target | 80.1% |
| Herbie | 99.2% |
if wj < -5.9999999999999997e-7Initial program 93.7
Simplified93.9
[Start]93.7 | \[ wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\] |
|---|---|
sub-neg [=>]93.7 | \[ \color{blue}{wj + \left(-\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
neg-mul-1 [=>]93.7 | \[ wj + \color{blue}{-1 \cdot \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}
\] |
*-commutative [=>]93.7 | \[ wj + \color{blue}{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}} \cdot -1}
\] |
*-commutative [<=]93.7 | \[ wj + \color{blue}{-1 \cdot \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}
\] |
neg-mul-1 [<=]93.7 | \[ wj + \color{blue}{\left(-\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
neg-sub0 [=>]93.7 | \[ wj + \color{blue}{\left(0 - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
div-sub [=>]93.7 | \[ wj + \left(0 - \color{blue}{\left(\frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}} - \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)}\right)
\] |
associate--r- [=>]93.7 | \[ wj + \color{blue}{\left(\left(0 - \frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right) + \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
+-commutative [=>]93.7 | \[ wj + \color{blue}{\left(\frac{x}{e^{wj} + wj \cdot e^{wj}} + \left(0 - \frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right)\right)}
\] |
sub0-neg [=>]93.7 | \[ wj + \left(\frac{x}{e^{wj} + wj \cdot e^{wj}} + \color{blue}{\left(-\frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right)}\right)
\] |
sub-neg [<=]93.7 | \[ wj + \color{blue}{\left(\frac{x}{e^{wj} + wj \cdot e^{wj}} - \frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
if -5.9999999999999997e-7 < wj < 2.70000000000000003e-4Initial program 79.5
Simplified79.5
[Start]79.5 | \[ wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\] |
|---|---|
sub-neg [=>]79.5 | \[ \color{blue}{wj + \left(-\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
neg-mul-1 [=>]79.5 | \[ wj + \color{blue}{-1 \cdot \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}
\] |
*-commutative [=>]79.5 | \[ wj + \color{blue}{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}} \cdot -1}
\] |
*-commutative [<=]79.5 | \[ wj + \color{blue}{-1 \cdot \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}
\] |
neg-mul-1 [<=]79.5 | \[ wj + \color{blue}{\left(-\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
neg-sub0 [=>]79.5 | \[ wj + \color{blue}{\left(0 - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
div-sub [=>]79.5 | \[ wj + \left(0 - \color{blue}{\left(\frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}} - \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)}\right)
\] |
associate--r- [=>]79.5 | \[ wj + \color{blue}{\left(\left(0 - \frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right) + \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
+-commutative [=>]79.5 | \[ wj + \color{blue}{\left(\frac{x}{e^{wj} + wj \cdot e^{wj}} + \left(0 - \frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right)\right)}
\] |
sub0-neg [=>]79.5 | \[ wj + \left(\frac{x}{e^{wj} + wj \cdot e^{wj}} + \color{blue}{\left(-\frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right)}\right)
\] |
sub-neg [<=]79.5 | \[ wj + \color{blue}{\left(\frac{x}{e^{wj} + wj \cdot e^{wj}} - \frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
Taylor expanded in wj around 0 99.8
Taylor expanded in x around 0 99.8
Simplified99.8
[Start]99.8 | \[ -1 \cdot \left(\left(0.6666666666666666 \cdot x + \left(-3 \cdot x + \left(1 + -2 \cdot \left(-4 \cdot x + 1.5 \cdot x\right)\right)\right)\right) \cdot {wj}^{3}\right) + \left({wj}^{2} + \left(-2 \cdot \left(wj \cdot x\right) + x\right)\right)
\] |
|---|---|
unpow2 [=>]99.8 | \[ -1 \cdot \left(\left(0.6666666666666666 \cdot x + \left(-3 \cdot x + \left(1 + -2 \cdot \left(-4 \cdot x + 1.5 \cdot x\right)\right)\right)\right) \cdot {wj}^{3}\right) + \left(\color{blue}{wj \cdot wj} + \left(-2 \cdot \left(wj \cdot x\right) + x\right)\right)
\] |
Taylor expanded in x around 0 99.8
if 2.70000000000000003e-4 < wj Initial program 50.3
Simplified98.8
[Start]50.3 | \[ wj - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}
\] |
|---|---|
sub-neg [=>]50.3 | \[ \color{blue}{wj + \left(-\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
neg-mul-1 [=>]50.3 | \[ wj + \color{blue}{-1 \cdot \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}
\] |
*-commutative [=>]50.3 | \[ wj + \color{blue}{\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}} \cdot -1}
\] |
*-commutative [<=]50.3 | \[ wj + \color{blue}{-1 \cdot \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}}
\] |
neg-mul-1 [<=]50.3 | \[ wj + \color{blue}{\left(-\frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
neg-sub0 [=>]50.3 | \[ wj + \color{blue}{\left(0 - \frac{wj \cdot e^{wj} - x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
div-sub [=>]50.3 | \[ wj + \left(0 - \color{blue}{\left(\frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}} - \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)}\right)
\] |
associate--r- [=>]50.3 | \[ wj + \color{blue}{\left(\left(0 - \frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right) + \frac{x}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
+-commutative [=>]50.3 | \[ wj + \color{blue}{\left(\frac{x}{e^{wj} + wj \cdot e^{wj}} + \left(0 - \frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right)\right)}
\] |
sub0-neg [=>]50.3 | \[ wj + \left(\frac{x}{e^{wj} + wj \cdot e^{wj}} + \color{blue}{\left(-\frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right)}\right)
\] |
sub-neg [<=]50.3 | \[ wj + \color{blue}{\left(\frac{x}{e^{wj} + wj \cdot e^{wj}} - \frac{wj \cdot e^{wj}}{e^{wj} + wj \cdot e^{wj}}\right)}
\] |
Taylor expanded in wj around 0 50.0
Simplified50.0
[Start]50.0 | \[ wj + \frac{\left(-1 \cdot \left(wj \cdot x\right) + x\right) - wj}{wj + 1}
\] |
|---|---|
associate-*r* [=>]50.0 | \[ wj + \frac{\left(\color{blue}{\left(-1 \cdot wj\right) \cdot x} + x\right) - wj}{wj + 1}
\] |
neg-mul-1 [<=]50.0 | \[ wj + \frac{\left(\color{blue}{\left(-wj\right)} \cdot x + x\right) - wj}{wj + 1}
\] |
distribute-lft1-in [=>]50.0 | \[ wj + \frac{\color{blue}{\left(\left(-wj\right) + 1\right) \cdot x} - wj}{wj + 1}
\] |
+-commutative [<=]50.0 | \[ wj + \frac{\color{blue}{\left(1 + \left(-wj\right)\right)} \cdot x - wj}{wj + 1}
\] |
sub-neg [<=]50.0 | \[ wj + \frac{\color{blue}{\left(1 - wj\right)} \cdot x - wj}{wj + 1}
\] |
Applied egg-rr50.0
Simplified50.0
[Start]50.0 | \[ wj + \frac{\left(1 - wj\right) \cdot x - wj}{1 - wj \cdot wj} \cdot \left(1 - wj\right)
\] |
|---|---|
associate-*l/ [=>]50.0 | \[ wj + \color{blue}{\frac{\left(\left(1 - wj\right) \cdot x - wj\right) \cdot \left(1 - wj\right)}{1 - wj \cdot wj}}
\] |
*-commutative [=>]50.0 | \[ wj + \frac{\left(\color{blue}{x \cdot \left(1 - wj\right)} - wj\right) \cdot \left(1 - wj\right)}{1 - wj \cdot wj}
\] |
Taylor expanded in x around 0 75.6
Simplified75.6
[Start]75.6 | \[ -1 \cdot \frac{\left(1 - wj\right) \cdot wj}{1 - {wj}^{2}} + wj
\] |
|---|---|
+-commutative [=>]75.6 | \[ \color{blue}{wj + -1 \cdot \frac{\left(1 - wj\right) \cdot wj}{1 - {wj}^{2}}}
\] |
associate-*r/ [=>]75.6 | \[ wj + \color{blue}{\frac{-1 \cdot \left(\left(1 - wj\right) \cdot wj\right)}{1 - {wj}^{2}}}
\] |
mul-1-neg [=>]75.6 | \[ wj + \frac{\color{blue}{-\left(1 - wj\right) \cdot wj}}{1 - {wj}^{2}}
\] |
*-commutative [=>]75.6 | \[ wj + \frac{-\color{blue}{wj \cdot \left(1 - wj\right)}}{1 - {wj}^{2}}
\] |
distribute-lft-neg-out [<=]75.6 | \[ wj + \frac{\color{blue}{\left(-wj\right) \cdot \left(1 - wj\right)}}{1 - {wj}^{2}}
\] |
sub-neg [=>]75.6 | \[ wj + \frac{\left(-wj\right) \cdot \color{blue}{\left(1 + \left(-wj\right)\right)}}{1 - {wj}^{2}}
\] |
distribute-lft-in [=>]75.6 | \[ wj + \frac{\color{blue}{\left(-wj\right) \cdot 1 + \left(-wj\right) \cdot \left(-wj\right)}}{1 - {wj}^{2}}
\] |
*-rgt-identity [=>]75.6 | \[ wj + \frac{\color{blue}{\left(-wj\right)} + \left(-wj\right) \cdot \left(-wj\right)}{1 - {wj}^{2}}
\] |
distribute-lft-neg-in [<=]75.6 | \[ wj + \frac{\left(-wj\right) + \color{blue}{\left(-wj \cdot \left(-wj\right)\right)}}{1 - {wj}^{2}}
\] |
distribute-rgt-neg-out [=>]75.6 | \[ wj + \frac{\left(-wj\right) + \left(-\color{blue}{\left(-wj \cdot wj\right)}\right)}{1 - {wj}^{2}}
\] |
remove-double-neg [=>]75.6 | \[ wj + \frac{\left(-wj\right) + \color{blue}{wj \cdot wj}}{1 - {wj}^{2}}
\] |
+-commutative [<=]75.6 | \[ wj + \frac{\color{blue}{wj \cdot wj + \left(-wj\right)}}{1 - {wj}^{2}}
\] |
sub-neg [<=]75.6 | \[ wj + \frac{\color{blue}{wj \cdot wj - wj}}{1 - {wj}^{2}}
\] |
unpow2 [=>]75.6 | \[ wj + \frac{wj \cdot wj - wj}{1 - \color{blue}{wj \cdot wj}}
\] |
Applied egg-rr75.5
Final simplification99.2
| Alternative 1 | |
|---|---|
| Error | 99.0% |
| Cost | 33604.00 |
| Alternative 2 | |
|---|---|
| Error | 98.9% |
| Cost | 7304.00 |
| Alternative 3 | |
|---|---|
| Error | 97.9% |
| Cost | 7172.00 |
| Alternative 4 | |
|---|---|
| Error | 87.5% |
| Cost | 6980.00 |
| Alternative 5 | |
|---|---|
| Error | 86.8% |
| Cost | 1481.00 |
| Alternative 6 | |
|---|---|
| Error | 88.0% |
| Cost | 1480.00 |
| Alternative 7 | |
|---|---|
| Error | 87.9% |
| Cost | 964.00 |
| Alternative 8 | |
|---|---|
| Error | 86.9% |
| Cost | 708.00 |
| Alternative 9 | |
|---|---|
| Error | 86.9% |
| Cost | 580.00 |
| Alternative 10 | |
|---|---|
| Error | 87.0% |
| Cost | 580.00 |
| Alternative 11 | |
|---|---|
| Error | 85.5% |
| Cost | 448.00 |
| Alternative 12 | |
|---|---|
| Error | 4.4% |
| Cost | 64.00 |
| Alternative 13 | |
|---|---|
| Error | 85.0% |
| Cost | 64.00 |
herbie shell --seed 2023098
(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))))))