\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -3.4374981009777875 \cdot 10^{27}:\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\mathbf{elif}\;x \le 8.649219799147649 \cdot 10^{-36}:\\
\;\;\;\;\left(1 \cdot \frac{x}{z} + \left(x \cdot y\right) \cdot \frac{1}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r690362 = x;
double r690363 = y;
double r690364 = z;
double r690365 = r690363 - r690364;
double r690366 = 1.0;
double r690367 = r690365 + r690366;
double r690368 = r690362 * r690367;
double r690369 = r690368 / r690364;
return r690369;
}
double f(double x, double y, double z) {
double r690370 = x;
double r690371 = -3.4374981009777875e+27;
bool r690372 = r690370 <= r690371;
double r690373 = z;
double r690374 = r690370 / r690373;
double r690375 = 1.0;
double r690376 = y;
double r690377 = r690375 + r690376;
double r690378 = r690374 * r690377;
double r690379 = r690378 - r690370;
double r690380 = 8.649219799147649e-36;
bool r690381 = r690370 <= r690380;
double r690382 = r690375 * r690374;
double r690383 = r690370 * r690376;
double r690384 = 1.0;
double r690385 = r690384 / r690373;
double r690386 = r690383 * r690385;
double r690387 = r690382 + r690386;
double r690388 = r690387 - r690370;
double r690389 = r690376 - r690373;
double r690390 = r690389 + r690375;
double r690391 = r690373 / r690390;
double r690392 = r690370 / r690391;
double r690393 = r690381 ? r690388 : r690392;
double r690394 = r690372 ? r690379 : r690393;
return r690394;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.2 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if x < -3.4374981009777875e+27Initial program 28.2
Taylor expanded around 0 9.1
Simplified0.1
if -3.4374981009777875e+27 < x < 8.649219799147649e-36Initial program 0.3
Taylor expanded around 0 0.1
Simplified3.0
rmApplied distribute-lft-in3.0
Simplified3.0
Simplified0.1
rmApplied div-inv0.1
if 8.649219799147649e-36 < x Initial program 21.3
rmApplied associate-/l*0.2
Final simplification0.1
herbie shell --seed 2020046
(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))