\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -6.6466251436762367 \cdot 10^{-189} \lor \neg \left(x \le 2.1251531056095331 \cdot 10^{-223}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, 1 \cdot \frac{x}{z} - x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{z} \cdot \left(\left(\left(y - z\right) + 1\right) \cdot \left(\sqrt[3]{1} \cdot x\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r670690 = x;
double r670691 = y;
double r670692 = z;
double r670693 = r670691 - r670692;
double r670694 = 1.0;
double r670695 = r670693 + r670694;
double r670696 = r670690 * r670695;
double r670697 = r670696 / r670692;
return r670697;
}
double f(double x, double y, double z) {
double r670698 = x;
double r670699 = -6.646625143676237e-189;
bool r670700 = r670698 <= r670699;
double r670701 = 2.125153105609533e-223;
bool r670702 = r670698 <= r670701;
double r670703 = !r670702;
bool r670704 = r670700 || r670703;
double r670705 = z;
double r670706 = r670698 / r670705;
double r670707 = y;
double r670708 = 1.0;
double r670709 = r670708 * r670706;
double r670710 = r670709 - r670698;
double r670711 = fma(r670706, r670707, r670710);
double r670712 = 1.0;
double r670713 = cbrt(r670712);
double r670714 = r670713 * r670713;
double r670715 = r670714 / r670705;
double r670716 = r670707 - r670705;
double r670717 = r670716 + r670708;
double r670718 = r670713 * r670698;
double r670719 = r670717 * r670718;
double r670720 = r670715 * r670719;
double r670721 = r670704 ? r670711 : r670720;
return r670721;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.6 |
if x < -6.646625143676237e-189 or 2.125153105609533e-223 < x Initial program 12.9
rmApplied associate-/l*2.3
rmApplied clear-num2.4
rmApplied div-inv2.5
Applied add-cube-cbrt2.5
Applied times-frac2.7
Simplified2.6
Taylor expanded around 0 4.2
Simplified0.6
if -6.646625143676237e-189 < x < 2.125153105609533e-223Initial program 0.2
rmApplied associate-/l*7.3
rmApplied clear-num7.5
rmApplied div-inv7.6
Applied add-cube-cbrt7.6
Applied times-frac8.0
Simplified7.9
rmApplied associate-/r/7.9
Applied associate-*l*0.3
Final simplification0.6
herbie shell --seed 2020062 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:precision binary64
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1)) z))