\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;x \le -1.71987773590663113 \cdot 10^{-63} \lor \neg \left(x \le 4.88595928443932435 \cdot 10^{-20}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{\left(x + 1\right) \cdot 1} - \frac{\frac{\sqrt[3]{x} \cdot \sqrt[3]{x}}{\sqrt[3]{t \cdot z - x} \cdot \sqrt[3]{t \cdot z - x}} \cdot \frac{\sqrt[3]{x}}{\sqrt[3]{t \cdot z - x}}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \left(y \cdot z - x\right) \cdot \frac{1}{t \cdot z - x}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r613529 = x;
double r613530 = y;
double r613531 = z;
double r613532 = r613530 * r613531;
double r613533 = r613532 - r613529;
double r613534 = t;
double r613535 = r613534 * r613531;
double r613536 = r613535 - r613529;
double r613537 = r613533 / r613536;
double r613538 = r613529 + r613537;
double r613539 = 1.0;
double r613540 = r613529 + r613539;
double r613541 = r613538 / r613540;
return r613541;
}
double f(double x, double y, double z, double t) {
double r613542 = x;
double r613543 = -1.719877735906631e-63;
bool r613544 = r613542 <= r613543;
double r613545 = 4.8859592844393243e-20;
bool r613546 = r613542 <= r613545;
double r613547 = !r613546;
bool r613548 = r613544 || r613547;
double r613549 = y;
double r613550 = t;
double r613551 = z;
double r613552 = r613550 * r613551;
double r613553 = r613552 - r613542;
double r613554 = r613549 / r613553;
double r613555 = fma(r613554, r613551, r613542);
double r613556 = 1.0;
double r613557 = r613542 + r613556;
double r613558 = 1.0;
double r613559 = r613557 * r613558;
double r613560 = r613555 / r613559;
double r613561 = cbrt(r613542);
double r613562 = r613561 * r613561;
double r613563 = cbrt(r613553);
double r613564 = r613563 * r613563;
double r613565 = r613562 / r613564;
double r613566 = r613561 / r613563;
double r613567 = r613565 * r613566;
double r613568 = r613567 / r613557;
double r613569 = r613560 - r613568;
double r613570 = r613549 * r613551;
double r613571 = r613570 - r613542;
double r613572 = r613558 / r613553;
double r613573 = r613571 * r613572;
double r613574 = r613542 + r613573;
double r613575 = r613574 / r613557;
double r613576 = r613548 ? r613569 : r613575;
return r613576;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.2 |
|---|---|
| Target | 0.4 |
| Herbie | 3.6 |
if x < -1.719877735906631e-63 or 4.8859592844393243e-20 < x Initial program 7.3
rmApplied div-sub7.3
Applied associate-+r-7.3
Applied div-sub7.3
Simplified1.1
rmApplied add-cube-cbrt1.1
Applied add-cube-cbrt1.1
Applied times-frac1.1
if -1.719877735906631e-63 < x < 4.8859592844393243e-20Initial program 7.0
rmApplied div-inv7.1
Final simplification3.6
herbie shell --seed 2020027 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))