| Alternative 1 | |
|---|---|
| Accuracy | 99.4% |
| Cost | 12992 |
\[\frac{e^{x}}{\mathsf{expm1}\left(x\right)}
\]
(FPCore (x) :precision binary64 (/ (exp x) (- (exp x) 1.0)))
(FPCore (x) :precision binary64 (* (exp x) (/ (+ (exp x) 1.0) (expm1 (+ x x)))))
double code(double x) {
return exp(x) / (exp(x) - 1.0);
}
double code(double x) {
return exp(x) * ((exp(x) + 1.0) / expm1((x + x)));
}
public static double code(double x) {
return Math.exp(x) / (Math.exp(x) - 1.0);
}
public static double code(double x) {
return Math.exp(x) * ((Math.exp(x) + 1.0) / Math.expm1((x + x)));
}
def code(x): return math.exp(x) / (math.exp(x) - 1.0)
def code(x): return math.exp(x) * ((math.exp(x) + 1.0) / math.expm1((x + x)))
function code(x) return Float64(exp(x) / Float64(exp(x) - 1.0)) end
function code(x) return Float64(exp(x) * Float64(Float64(exp(x) + 1.0) / expm1(Float64(x + x)))) end
code[x_] := N[(N[Exp[x], $MachinePrecision] / N[(N[Exp[x], $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision]
code[x_] := N[(N[Exp[x], $MachinePrecision] * N[(N[(N[Exp[x], $MachinePrecision] + 1.0), $MachinePrecision] / N[(Exp[N[(x + x), $MachinePrecision]] - 1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\frac{e^{x}}{e^{x} - 1}
e^{x} \cdot \frac{e^{x} + 1}{\mathsf{expm1}\left(x + x\right)}
Results
| Original | 37.1% |
|---|---|
| Target | 37.7% |
| Herbie | 99.3% |
Initial program 33.0%
Simplified99.2%
[Start]33.0 | \[ \frac{e^{x}}{e^{x} - 1}
\] |
|---|---|
expm1-def [=>]99.2 | \[ \frac{e^{x}}{\color{blue}{\mathsf{expm1}\left(x\right)}}
\] |
Applied egg-rr33.0%
[Start]99.2 | \[ \frac{e^{x}}{\mathsf{expm1}\left(x\right)}
\] |
|---|---|
expm1-udef [=>]33.0 | \[ \frac{e^{x}}{\color{blue}{e^{x} - 1}}
\] |
flip-- [=>]33.0 | \[ \frac{e^{x}}{\color{blue}{\frac{e^{x} \cdot e^{x} - 1 \cdot 1}{e^{x} + 1}}}
\] |
pow2 [=>]33.0 | \[ \frac{e^{x}}{\frac{\color{blue}{{\left(e^{x}\right)}^{2}} - 1 \cdot 1}{e^{x} + 1}}
\] |
metadata-eval [=>]33.0 | \[ \frac{e^{x}}{\frac{{\left(e^{x}\right)}^{2} - \color{blue}{1}}{e^{x} + 1}}
\] |
Simplified99.2%
[Start]33.0 | \[ \frac{e^{x}}{\frac{{\left(e^{x}\right)}^{2} - 1}{e^{x} + 1}}
\] |
|---|---|
unpow2 [=>]33.0 | \[ \frac{e^{x}}{\frac{\color{blue}{e^{x} \cdot e^{x}} - 1}{e^{x} + 1}}
\] |
prod-exp [=>]33.0 | \[ \frac{e^{x}}{\frac{\color{blue}{e^{x + x}} - 1}{e^{x} + 1}}
\] |
expm1-def [=>]99.2 | \[ \frac{e^{x}}{\frac{\color{blue}{\mathsf{expm1}\left(x + x\right)}}{e^{x} + 1}}
\] |
+-commutative [<=]99.2 | \[ \frac{e^{x}}{\frac{\mathsf{expm1}\left(x + x\right)}{\color{blue}{1 + e^{x}}}}
\] |
Applied egg-rr99.2%
[Start]99.2 | \[ \frac{e^{x}}{\frac{\mathsf{expm1}\left(x + x\right)}{1 + e^{x}}}
\] |
|---|---|
clear-num [=>]99.2 | \[ \color{blue}{\frac{1}{\frac{\frac{\mathsf{expm1}\left(x + x\right)}{1 + e^{x}}}{e^{x}}}}
\] |
associate-/r/ [=>]99.2 | \[ \color{blue}{\frac{1}{\frac{\mathsf{expm1}\left(x + x\right)}{1 + e^{x}}} \cdot e^{x}}
\] |
clear-num [<=]99.2 | \[ \color{blue}{\frac{1 + e^{x}}{\mathsf{expm1}\left(x + x\right)}} \cdot e^{x}
\] |
+-commutative [=>]99.2 | \[ \frac{\color{blue}{e^{x} + 1}}{\mathsf{expm1}\left(x + x\right)} \cdot e^{x}
\] |
Final simplification99.2%
| Alternative 1 | |
|---|---|
| Accuracy | 99.4% |
| Cost | 12992 |
| Alternative 2 | |
|---|---|
| Accuracy | 98.7% |
| Cost | 7104 |
| Alternative 3 | |
|---|---|
| Accuracy | 97.7% |
| Cost | 6592 |
| Alternative 4 | |
|---|---|
| Accuracy | 66.7% |
| Cost | 576 |
| Alternative 5 | |
|---|---|
| Accuracy | 66.7% |
| Cost | 576 |
| Alternative 6 | |
|---|---|
| Accuracy | 66.7% |
| Cost | 320 |
| Alternative 7 | |
|---|---|
| Accuracy | 66.8% |
| Cost | 192 |
| Alternative 8 | |
|---|---|
| Accuracy | 3.3% |
| Cost | 64 |
| Alternative 9 | |
|---|---|
| Accuracy | 3.9% |
| Cost | 64 |
herbie shell --seed 2023159
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1.0 (- 1.0 (exp (- x))))
(/ (exp x) (- (exp x) 1.0)))