1.0 - \frac{\left(1.0 - x\right) \cdot y}{y + 1.0}\begin{array}{l}
\mathbf{if}\;y \le -3480617740589270.5:\\
\;\;\;\;\mathsf{fma}\left(1.0, \frac{1}{y} - \frac{x}{y}, x\right)\\
\mathbf{elif}\;y \le 4005471382996.025:\\
\;\;\;\;\left(1.0 - \frac{\left(1.0 - x\right) \cdot y}{\mathsf{fma}\left(y, y \cdot y, \left(1.0 \cdot 1.0\right) \cdot 1.0\right)} \cdot \left(y \cdot y\right)\right) - \left(1.0 \cdot 1.0 - 1.0 \cdot y\right) \cdot \frac{\left(1.0 - x\right) \cdot y}{\mathsf{fma}\left(y, y \cdot y, \left(1.0 \cdot 1.0\right) \cdot 1.0\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(1.0, \frac{1}{y} - \frac{x}{y}, x\right)\\
\end{array}double f(double x, double y) {
double r29876961 = 1.0;
double r29876962 = x;
double r29876963 = r29876961 - r29876962;
double r29876964 = y;
double r29876965 = r29876963 * r29876964;
double r29876966 = r29876964 + r29876961;
double r29876967 = r29876965 / r29876966;
double r29876968 = r29876961 - r29876967;
return r29876968;
}
double f(double x, double y) {
double r29876969 = y;
double r29876970 = -3480617740589270.5;
bool r29876971 = r29876969 <= r29876970;
double r29876972 = 1.0;
double r29876973 = 1.0;
double r29876974 = r29876973 / r29876969;
double r29876975 = x;
double r29876976 = r29876975 / r29876969;
double r29876977 = r29876974 - r29876976;
double r29876978 = fma(r29876972, r29876977, r29876975);
double r29876979 = 4005471382996.025;
bool r29876980 = r29876969 <= r29876979;
double r29876981 = r29876972 - r29876975;
double r29876982 = r29876981 * r29876969;
double r29876983 = r29876969 * r29876969;
double r29876984 = r29876972 * r29876972;
double r29876985 = r29876984 * r29876972;
double r29876986 = fma(r29876969, r29876983, r29876985);
double r29876987 = r29876982 / r29876986;
double r29876988 = r29876987 * r29876983;
double r29876989 = r29876972 - r29876988;
double r29876990 = r29876972 * r29876969;
double r29876991 = r29876984 - r29876990;
double r29876992 = r29876991 * r29876987;
double r29876993 = r29876989 - r29876992;
double r29876994 = r29876980 ? r29876993 : r29876978;
double r29876995 = r29876971 ? r29876978 : r29876994;
return r29876995;
}




Bits error versus x




Bits error versus y
| Original | 21.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if y < -3480617740589270.5 or 4005471382996.025 < y Initial program 43.9
Taylor expanded around inf 0.0
Simplified0.0
if -3480617740589270.5 < y < 4005471382996.025Initial program 0.4
rmApplied flip3-+0.5
Applied associate-/r/0.5
Simplified0.5
rmApplied distribute-rgt-in0.5
Applied associate--r+0.3
Final simplification0.2
herbie shell --seed 2019162 +o rules:numerics
(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))))