1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -1.020049338560968577027665560308378189802 \lor \neg \left(y \le 70729809.48992495238780975341796875\right):\\
\;\;\;\;\left(x - \frac{1 \cdot x}{y}\right) + \frac{1}{y}\\
\mathbf{else}:\\
\;\;\;\;1 - \left(1 - x\right) \cdot \frac{\frac{y}{\sqrt{1 + y}}}{\sqrt{1 + y}}\\
\end{array}double f(double x, double y) {
double r560821 = 1.0;
double r560822 = x;
double r560823 = r560821 - r560822;
double r560824 = y;
double r560825 = r560823 * r560824;
double r560826 = r560824 + r560821;
double r560827 = r560825 / r560826;
double r560828 = r560821 - r560827;
return r560828;
}
double f(double x, double y) {
double r560829 = y;
double r560830 = -1.0200493385609686;
bool r560831 = r560829 <= r560830;
double r560832 = 70729809.48992495;
bool r560833 = r560829 <= r560832;
double r560834 = !r560833;
bool r560835 = r560831 || r560834;
double r560836 = x;
double r560837 = 1.0;
double r560838 = r560837 * r560836;
double r560839 = r560838 / r560829;
double r560840 = r560836 - r560839;
double r560841 = r560837 / r560829;
double r560842 = r560840 + r560841;
double r560843 = r560837 - r560836;
double r560844 = r560837 + r560829;
double r560845 = sqrt(r560844);
double r560846 = r560829 / r560845;
double r560847 = r560846 / r560845;
double r560848 = r560843 * r560847;
double r560849 = r560837 - r560848;
double r560850 = r560835 ? r560842 : r560849;
return r560850;
}




Bits error versus x




Bits error versus y
Results
| Original | 22.5 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if y < -1.0200493385609686 or 70729809.48992495 < y Initial program 45.7
Simplified29.1
rmApplied add-sqr-sqrt46.9
Applied associate-/r*46.9
Taylor expanded around inf 0.5
Simplified0.5
if -1.0200493385609686 < y < 70729809.48992495Initial program 0.1
Simplified0.1
rmApplied add-sqr-sqrt0.1
Applied associate-/r*0.1
Final simplification0.3
herbie shell --seed 2019195
(FPCore (x y)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, D"
:herbie-target
(if (< y -3693.8482788297247) (- (/ 1.0 y) (- (/ x y) x)) (if (< y 6799310503.41891) (- 1.0 (/ (* (- 1.0 x) y) (+ y 1.0))) (- (/ 1.0 y) (- (/ x y) x))))
(- 1.0 (/ (* (- 1.0 x) y) (+ y 1.0))))