\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\mathsf{fma}\left(\frac{1}{\frac{\mathsf{fma}\left(z, t, -x\right)}{z}}, y, x\right) - \frac{\sqrt[3]{x}}{\sqrt[3]{\mathsf{fma}\left(z, t, -x\right)}} \cdot \frac{\frac{\sqrt[3]{x} \cdot \sqrt[3]{x}}{\sqrt[3]{\mathsf{fma}\left(z, t, -x\right)}}}{\sqrt[3]{\mathsf{fma}\left(z, t, -x\right)}}}{1 + x}double f(double x, double y, double z, double t) {
double r585530 = x;
double r585531 = y;
double r585532 = z;
double r585533 = r585531 * r585532;
double r585534 = r585533 - r585530;
double r585535 = t;
double r585536 = r585535 * r585532;
double r585537 = r585536 - r585530;
double r585538 = r585534 / r585537;
double r585539 = r585530 + r585538;
double r585540 = 1.0;
double r585541 = r585530 + r585540;
double r585542 = r585539 / r585541;
return r585542;
}
double f(double x, double y, double z, double t) {
double r585543 = 1.0;
double r585544 = z;
double r585545 = t;
double r585546 = x;
double r585547 = -r585546;
double r585548 = fma(r585544, r585545, r585547);
double r585549 = r585548 / r585544;
double r585550 = r585543 / r585549;
double r585551 = y;
double r585552 = fma(r585550, r585551, r585546);
double r585553 = cbrt(r585546);
double r585554 = cbrt(r585548);
double r585555 = r585553 / r585554;
double r585556 = r585553 * r585553;
double r585557 = r585556 / r585554;
double r585558 = r585557 / r585554;
double r585559 = r585555 * r585558;
double r585560 = r585552 - r585559;
double r585561 = 1.0;
double r585562 = r585561 + r585546;
double r585563 = r585560 / r585562;
return r585563;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.1 |
|---|---|
| Target | 0.4 |
| Herbie | 2.3 |
Initial program 7.1
Simplified7.1
rmApplied div-sub7.1
Applied associate-+r-7.1
Simplified2.2
rmApplied clear-num2.2
Simplified2.2
rmApplied add-cube-cbrt2.4
Applied add-cube-cbrt2.3
Applied times-frac2.3
Simplified2.3
Simplified2.3
Final simplification2.3
herbie shell --seed 2019194 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1.0))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)))