\frac{x0}{1 - x1} - x0
\begin{array}{l}
\mathbf{if}\;1 - x1 \leq 0.9814:\\
\;\;\;\;e^{\log \log \left(e^{\frac{\frac{x0 \cdot x0}{{\left(1 - x1\right)}^{2}} - x0 \cdot x0}{x0 + \frac{x0}{\left(1 - \sqrt{x1}\right) \cdot \left(1 + \sqrt{x1}\right)}}}\right)}\\
\mathbf{else}:\\
\;\;\;\;x0 \cdot \left(\left(\mathsf{fma}\left(x1, x1, x1\right) + {x1}^{3}\right) + {x1}^{4}\right)\\
\end{array}
(FPCore (x0 x1) :precision binary64 (- (/ x0 (- 1.0 x1)) x0))
(FPCore (x0 x1)
:precision binary64
(if (<= (- 1.0 x1) 0.9814)
(exp
(log
(log
(exp
(/
(- (/ (* x0 x0) (pow (- 1.0 x1) 2.0)) (* x0 x0))
(+ x0 (/ x0 (* (- 1.0 (sqrt x1)) (+ 1.0 (sqrt x1))))))))))
(* x0 (+ (+ (fma x1 x1 x1) (pow x1 3.0)) (pow x1 4.0)))))double code(double x0, double x1) {
return (x0 / (1.0 - x1)) - x0;
}
double code(double x0, double x1) {
double tmp;
if ((1.0 - x1) <= 0.9814) {
tmp = exp(log(log(exp((((x0 * x0) / pow((1.0 - x1), 2.0)) - (x0 * x0)) / (x0 + (x0 / ((1.0 - sqrt(x1)) * (1.0 + sqrt(x1)))))))));
} else {
tmp = x0 * ((fma(x1, x1, x1) + pow(x1, 3.0)) + pow(x1, 4.0));
}
return tmp;
}




Bits error versus x0




Bits error versus x1
| Original | 8.4 |
|---|---|
| Target | 0.5 |
| Herbie | 2.4 |
if (-.f64 1 x1) < 0.98140000000000005Initial program 5.5
rmApplied flip--_binary644.0
Simplified4.0
rmApplied add-sqr-sqrt_binary644.0
Applied add-sqr-sqrt_binary644.0
Applied difference-of-squares_binary644.0
Applied add-sqr-sqrt_binary644.0
Applied times-frac_binary643.9
Simplified3.9
Simplified3.9
rmApplied add-log-exp_binary641.6
Simplified1.6
rmApplied add-exp-log_binary641.0
if 0.98140000000000005 < (-.f64 1 x1) Initial program 11.3
Taylor expanded around 0 3.9
Simplified3.9
Final simplification2.4
herbie shell --seed 2021209
(FPCore (x0 x1)
:name "(- (/ x0 (- 1 x1)) x0)"
:precision binary64
:pre (or (and (== x0 1.855) (== x1 0.000209)) (and (== x0 2.985) (== x1 0.0186)))
:herbie-target
(/ (* x0 x1) (- 1.0 x1))
(- (/ x0 (- 1.0 x1)) x0))