
Results
Herbie found 8 alternatives:
| Alternative | Accuracy | Speedup |
|---|
| Original | 6.4% |
|---|---|
| Target | 77.6% |
| Herbie | 99.9% |
if (/.f64 (*.f64 eps (-.f64 (exp.f64 (*.f64 (+.f64 a b) eps)) 1)) (*.f64 (-.f64 (exp.f64 (*.f64 a eps)) 1) (-.f64 (exp.f64 (*.f64 b eps)) 1))) < -inf.0 or 0.0400000000000000008 < (/.f64 (*.f64 eps (-.f64 (exp.f64 (*.f64 (+.f64 a b) eps)) 1)) (*.f64 (-.f64 (exp.f64 (*.f64 a eps)) 1) (-.f64 (exp.f64 (*.f64 b eps)) 1))) Initial program 0.5%
associate-*l/0.5%
*-commutative0.5%
expm1-def2.4%
*-commutative2.4%
expm1-def9.1%
*-commutative9.1%
expm1-def32.6%
*-commutative32.6%
Simplified32.6%
Taylor expanded in eps around 0 77.8%
Taylor expanded in a around 0 100.0%
if -inf.0 < (/.f64 (*.f64 eps (-.f64 (exp.f64 (*.f64 (+.f64 a b) eps)) 1)) (*.f64 (-.f64 (exp.f64 (*.f64 a eps)) 1) (-.f64 (exp.f64 (*.f64 b eps)) 1))) < 0.0400000000000000008Initial program 91.1%
associate-*l/91.1%
*-commutative91.1%
expm1-def91.1%
*-commutative91.1%
expm1-def96.6%
*-commutative96.6%
expm1-def99.8%
*-commutative99.8%
Simplified99.8%
Final simplification100.0%
if eps < -5.2000000000000002e-86Initial program 28.1%
times-frac28.1%
expm1-def41.6%
*-commutative41.6%
expm1-def43.2%
*-commutative43.2%
expm1-def92.7%
*-commutative92.7%
Simplified92.7%
Taylor expanded in eps around 0 69.3%
if -5.2000000000000002e-86 < eps Initial program 4.1%
associate-*l/4.1%
*-commutative4.1%
expm1-def5.9%
*-commutative5.9%
expm1-def11.6%
*-commutative11.6%
expm1-def33.5%
*-commutative33.5%
Simplified33.5%
Taylor expanded in eps around 0 76.5%
Taylor expanded in a around 0 97.0%
Final simplification93.9%
if a < 5.8000000000000003e116Initial program 4.2%
associate-*l/4.2%
*-commutative4.2%
expm1-def6.1%
*-commutative6.1%
expm1-def13.3%
*-commutative13.3%
expm1-def33.4%
*-commutative33.4%
Simplified33.4%
Taylor expanded in eps around 0 75.0%
Taylor expanded in a around 0 96.9%
if 5.8000000000000003e116 < a Initial program 25.0%
times-frac25.0%
expm1-def28.0%
*-commutative28.0%
expm1-def28.5%
*-commutative28.5%
expm1-def67.9%
*-commutative67.9%
Simplified67.9%
Taylor expanded in a around 0 26.7%
Final simplification87.9%
if a < -3.40000000000000005e-130Initial program 10.0%
expm1-def10.7%
*-commutative10.7%
expm1-def17.6%
*-commutative17.6%
expm1-def47.4%
*-commutative47.4%
Simplified47.4%
Taylor expanded in b around 0 21.5%
expm1-def29.7%
*-commutative29.7%
Simplified29.7%
Taylor expanded in eps around 0 62.6%
if -3.40000000000000005e-130 < a Initial program 5.2%
associate-*l/5.2%
*-commutative5.2%
expm1-def7.0%
*-commutative7.0%
expm1-def13.6%
*-commutative13.6%
expm1-def30.5%
*-commutative30.5%
Simplified30.5%
Taylor expanded in a around 0 60.1%
Final simplification61.0%
Initial program 6.8%
associate-*l/6.8%
*-commutative6.8%
expm1-def8.6%
*-commutative8.6%
expm1-def15.2%
*-commutative15.2%
expm1-def37.3%
*-commutative37.3%
Simplified37.3%
Taylor expanded in eps around 0 75.1%
Taylor expanded in a around 0 94.4%
Final simplification94.4%
if a < -3.40000000000000005e-130Initial program 10.0%
associate-*l/10.0%
*-commutative10.0%
expm1-def11.6%
*-commutative11.6%
expm1-def18.3%
*-commutative18.3%
expm1-def50.0%
*-commutative50.0%
Simplified50.0%
Taylor expanded in b around 0 62.1%
if -3.40000000000000005e-130 < a Initial program 5.2%
associate-*l/5.2%
*-commutative5.2%
expm1-def7.0%
*-commutative7.0%
expm1-def13.6%
*-commutative13.6%
expm1-def30.5%
*-commutative30.5%
Simplified30.5%
Taylor expanded in a around 0 60.1%
Final simplification60.8%
Initial program 6.8%
expm1-def7.7%
*-commutative7.7%
expm1-def14.4%
*-commutative14.4%
expm1-def34.3%
*-commutative34.3%
Simplified34.3%
Taylor expanded in b around 0 13.9%
expm1-def19.7%
*-commutative19.7%
Simplified19.7%
Taylor expanded in eps around 0 45.7%
Taylor expanded in eps around inf 3.2%
Final simplification3.2%
Initial program 6.8%
associate-*l/6.8%
*-commutative6.8%
expm1-def8.6%
*-commutative8.6%
expm1-def15.2%
*-commutative15.2%
expm1-def37.3%
*-commutative37.3%
Simplified37.3%
Taylor expanded in a around 0 49.8%
Final simplification49.8%
herbie shell --seed 2023166
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
:precision binary64
:pre (and (< -1.0 eps) (< eps 1.0))
:herbie-target
(/ (+ a b) (* a b))
(/ (* eps (- (exp (* (+ a b) eps)) 1.0)) (* (- (exp (* a eps)) 1.0) (- (exp (* b eps)) 1.0))))