\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -5596220615.762752532958984375:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, \frac{x \cdot 1}{z} - x\right)\\
\mathbf{elif}\;x \le 1201898336259836928:\\
\;\;\;\;\frac{x \cdot \left(1 + \left(y - z\right)\right)}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y + 1\right) - z}}\\
\end{array}double f(double x, double y, double z) {
double r389084 = x;
double r389085 = y;
double r389086 = z;
double r389087 = r389085 - r389086;
double r389088 = 1.0;
double r389089 = r389087 + r389088;
double r389090 = r389084 * r389089;
double r389091 = r389090 / r389086;
return r389091;
}
double f(double x, double y, double z) {
double r389092 = x;
double r389093 = -5596220615.762753;
bool r389094 = r389092 <= r389093;
double r389095 = z;
double r389096 = r389092 / r389095;
double r389097 = y;
double r389098 = 1.0;
double r389099 = r389092 * r389098;
double r389100 = r389099 / r389095;
double r389101 = r389100 - r389092;
double r389102 = fma(r389096, r389097, r389101);
double r389103 = 1.201898336259837e+18;
bool r389104 = r389092 <= r389103;
double r389105 = r389097 - r389095;
double r389106 = r389098 + r389105;
double r389107 = r389092 * r389106;
double r389108 = r389107 / r389095;
double r389109 = r389097 + r389098;
double r389110 = r389109 - r389095;
double r389111 = r389095 / r389110;
double r389112 = r389092 / r389111;
double r389113 = r389104 ? r389108 : r389112;
double r389114 = r389094 ? r389102 : r389113;
return r389114;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.3 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if x < -5596220615.762753Initial program 27.6
Taylor expanded around 0 8.9
Simplified0.1
if -5596220615.762753 < x < 1.201898336259837e+18Initial program 0.2
if 1.201898336259837e+18 < x Initial program 28.3
rmApplied associate-/l*0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019196 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1.0 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1.0)) (/ 1.0 z)) (- (* (+ 1.0 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1.0)) z))