1.0 - \frac{\left(1.0 - x\right) \cdot y}{y + 1.0}\begin{array}{l}
\mathbf{if}\;y \le -178146608.6426316:\\
\;\;\;\;\left(x + \frac{1.0}{y}\right) - \frac{x \cdot 1.0}{y}\\
\mathbf{elif}\;y \le 170810479.021181:\\
\;\;\;\;\mathsf{fma}\left(\frac{x - 1.0}{y + 1.0}, y, 1.0\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x + \frac{1.0}{y}\right) - \frac{x \cdot 1.0}{y}\\
\end{array}double f(double x, double y) {
double r30892823 = 1.0;
double r30892824 = x;
double r30892825 = r30892823 - r30892824;
double r30892826 = y;
double r30892827 = r30892825 * r30892826;
double r30892828 = r30892826 + r30892823;
double r30892829 = r30892827 / r30892828;
double r30892830 = r30892823 - r30892829;
return r30892830;
}
double f(double x, double y) {
double r30892831 = y;
double r30892832 = -178146608.6426316;
bool r30892833 = r30892831 <= r30892832;
double r30892834 = x;
double r30892835 = 1.0;
double r30892836 = r30892835 / r30892831;
double r30892837 = r30892834 + r30892836;
double r30892838 = r30892834 * r30892835;
double r30892839 = r30892838 / r30892831;
double r30892840 = r30892837 - r30892839;
double r30892841 = 170810479.021181;
bool r30892842 = r30892831 <= r30892841;
double r30892843 = r30892834 - r30892835;
double r30892844 = r30892831 + r30892835;
double r30892845 = r30892843 / r30892844;
double r30892846 = fma(r30892845, r30892831, r30892835);
double r30892847 = r30892842 ? r30892846 : r30892840;
double r30892848 = r30892833 ? r30892840 : r30892847;
return r30892848;
}




Bits error versus x




Bits error versus y
| Original | 21.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if y < -178146608.6426316 or 170810479.021181 < y Initial program 44.5
Simplified29.6
Taylor expanded around inf 0.1
Simplified0.1
if -178146608.6426316 < y < 170810479.021181Initial program 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019164 +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))))