\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -13905844898214332094159488174298157285380 \lor \neg \left(x \le 9.371800790310021716388672147044997948808 \cdot 10^{-61}\right):\\
\;\;\;\;\left(\frac{1 \cdot x}{z} - x\right) + \frac{y}{\frac{z}{x}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{z} \cdot \left(x \cdot y\right) + \left(\frac{1 \cdot x}{z} - x\right)\\
\end{array}double f(double x, double y, double z) {
double r523456 = x;
double r523457 = y;
double r523458 = z;
double r523459 = r523457 - r523458;
double r523460 = 1.0;
double r523461 = r523459 + r523460;
double r523462 = r523456 * r523461;
double r523463 = r523462 / r523458;
return r523463;
}
double f(double x, double y, double z) {
double r523464 = x;
double r523465 = -1.3905844898214332e+40;
bool r523466 = r523464 <= r523465;
double r523467 = 9.371800790310022e-61;
bool r523468 = r523464 <= r523467;
double r523469 = !r523468;
bool r523470 = r523466 || r523469;
double r523471 = 1.0;
double r523472 = r523471 * r523464;
double r523473 = z;
double r523474 = r523472 / r523473;
double r523475 = r523474 - r523464;
double r523476 = y;
double r523477 = r523473 / r523464;
double r523478 = r523476 / r523477;
double r523479 = r523475 + r523478;
double r523480 = 1.0;
double r523481 = r523480 / r523473;
double r523482 = r523464 * r523476;
double r523483 = r523481 * r523482;
double r523484 = r523483 + r523475;
double r523485 = r523470 ? r523479 : r523484;
return r523485;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 9.9 |
|---|---|
| Target | 0.5 |
| Herbie | 0.2 |
if x < -1.3905844898214332e+40 or 9.371800790310022e-61 < x Initial program 23.3
Simplified0.4
Taylor expanded around 0 7.9
Simplified0.1
if -1.3905844898214332e+40 < x < 9.371800790310022e-61Initial program 0.3
Simplified14.8
Taylor expanded around 0 0.2
Simplified3.1
rmApplied div-inv3.1
Applied *-un-lft-identity3.1
Applied times-frac0.3
Simplified0.2
Final simplification0.2
herbie shell --seed 2019194
(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))