\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 r27481008 = x;
double r27481009 = y;
double r27481010 = z;
double r27481011 = r27481009 - r27481010;
double r27481012 = 1.0;
double r27481013 = r27481011 + r27481012;
double r27481014 = r27481008 * r27481013;
double r27481015 = r27481014 / r27481010;
return r27481015;
}
double f(double x, double y, double z) {
double r27481016 = x;
double r27481017 = -5.5666437058214586e-149;
bool r27481018 = r27481016 <= r27481017;
double r27481019 = z;
double r27481020 = y;
double r27481021 = r27481020 - r27481019;
double r27481022 = 1.0;
double r27481023 = r27481021 + r27481022;
double r27481024 = r27481019 / r27481023;
double r27481025 = r27481016 / r27481024;
double r27481026 = 6.501322699678815e-163;
bool r27481027 = r27481016 <= r27481026;
double r27481028 = r27481023 * r27481016;
double r27481029 = 1.0;
double r27481030 = r27481029 / r27481019;
double r27481031 = r27481028 * r27481030;
double r27481032 = r27481016 / r27481019;
double r27481033 = r27481022 * r27481032;
double r27481034 = r27481033 - r27481016;
double r27481035 = fma(r27481032, r27481020, r27481034);
double r27481036 = r27481027 ? r27481031 : r27481035;
double r27481037 = r27481018 ? r27481025 : r27481036;
return r27481037;
}




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 *-un-lft-identity0.2
Applied times-frac7.9
Simplified7.9
rmApplied div-inv8.0
Applied associate-*r*0.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))