\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -5.566643705821458561738054118661531424499 \cdot 10^{-149}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{elif}\;x \le 6.501322699678815134539600341361465497568 \cdot 10^{-163}:\\
\;\;\;\;\left(\left(\left(y - z\right) + 1\right) \cdot x\right) \cdot \frac{1}{z}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, 1 \cdot \frac{x}{z} - x\right)\\
\end{array}double f(double x, double y, double z) {
double r26684587 = x;
double r26684588 = y;
double r26684589 = z;
double r26684590 = r26684588 - r26684589;
double r26684591 = 1.0;
double r26684592 = r26684590 + r26684591;
double r26684593 = r26684587 * r26684592;
double r26684594 = r26684593 / r26684589;
return r26684594;
}
double f(double x, double y, double z) {
double r26684595 = x;
double r26684596 = -5.5666437058214586e-149;
bool r26684597 = r26684595 <= r26684596;
double r26684598 = z;
double r26684599 = y;
double r26684600 = r26684599 - r26684598;
double r26684601 = 1.0;
double r26684602 = r26684600 + r26684601;
double r26684603 = r26684598 / r26684602;
double r26684604 = r26684595 / r26684603;
double r26684605 = 6.501322699678815e-163;
bool r26684606 = r26684595 <= r26684605;
double r26684607 = r26684602 * r26684595;
double r26684608 = 1.0;
double r26684609 = r26684608 / r26684598;
double r26684610 = r26684607 * r26684609;
double r26684611 = r26684595 / r26684598;
double r26684612 = r26684601 * r26684611;
double r26684613 = r26684612 - r26684595;
double r26684614 = fma(r26684611, r26684599, r26684613);
double r26684615 = r26684606 ? r26684610 : r26684614;
double r26684616 = r26684597 ? r26684604 : r26684615;
return r26684616;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.2 |
|---|---|
| Target | 0.5 |
| Herbie | 0.7 |
if x < -5.5666437058214586e-149Initial program 15.1
rmApplied associate-/l*1.3
if -5.5666437058214586e-149 < x < 6.501322699678815e-163Initial program 0.2
rmApplied associate-/l*7.3
rmApplied div-inv7.4
Applied *-un-lft-identity7.4
Applied times-frac0.3
Simplified0.3
if 6.501322699678815e-163 < x Initial program 14.2
Taylor expanded around 0 5.2
Simplified0.4
Final simplification0.7
herbie shell --seed 2019172 +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))