\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 r571309 = x;
double r571310 = y;
double r571311 = z;
double r571312 = r571310 - r571311;
double r571313 = 1.0;
double r571314 = r571312 + r571313;
double r571315 = r571309 * r571314;
double r571316 = r571315 / r571311;
return r571316;
}
double f(double x, double y, double z) {
double r571317 = x;
double r571318 = -6.646625143676237e-189;
bool r571319 = r571317 <= r571318;
double r571320 = 2.125153105609533e-223;
bool r571321 = r571317 <= r571320;
double r571322 = !r571321;
bool r571323 = r571319 || r571322;
double r571324 = z;
double r571325 = r571317 / r571324;
double r571326 = y;
double r571327 = 1.0;
double r571328 = r571327 * r571325;
double r571329 = r571328 - r571317;
double r571330 = fma(r571325, r571326, r571329);
double r571331 = 1.0;
double r571332 = cbrt(r571331);
double r571333 = r571332 * r571332;
double r571334 = r571333 / r571324;
double r571335 = r571326 - r571324;
double r571336 = r571335 + r571327;
double r571337 = r571332 * r571317;
double r571338 = r571336 * r571337;
double r571339 = r571334 * r571338;
double r571340 = r571323 ? r571330 : r571339;
return r571340;
}




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))