\frac{x}{y} \cdot \left(z - t\right) + t\mathsf{fma}\left(\frac{\sqrt[3]{z - t} \cdot \sqrt[3]{z - t}}{\frac{1}{\sqrt[3]{x} \cdot \sqrt[3]{x}}}, \frac{\sqrt[3]{z - t}}{\frac{y}{\sqrt[3]{x}}}, t\right)double f(double x, double y, double z, double t) {
double r21728577 = x;
double r21728578 = y;
double r21728579 = r21728577 / r21728578;
double r21728580 = z;
double r21728581 = t;
double r21728582 = r21728580 - r21728581;
double r21728583 = r21728579 * r21728582;
double r21728584 = r21728583 + r21728581;
return r21728584;
}
double f(double x, double y, double z, double t) {
double r21728585 = z;
double r21728586 = t;
double r21728587 = r21728585 - r21728586;
double r21728588 = cbrt(r21728587);
double r21728589 = r21728588 * r21728588;
double r21728590 = 1.0;
double r21728591 = x;
double r21728592 = cbrt(r21728591);
double r21728593 = r21728592 * r21728592;
double r21728594 = r21728590 / r21728593;
double r21728595 = r21728589 / r21728594;
double r21728596 = y;
double r21728597 = r21728596 / r21728592;
double r21728598 = r21728588 / r21728597;
double r21728599 = fma(r21728595, r21728598, r21728586);
return r21728599;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 2.1 |
|---|---|
| Target | 2.2 |
| Herbie | 1.7 |
Initial program 2.1
Taylor expanded around 0 6.2
Simplified2.1
rmApplied add-cube-cbrt2.6
Applied *-un-lft-identity2.6
Applied times-frac2.6
Applied add-cube-cbrt2.7
Applied times-frac1.7
Applied fma-def1.7
Final simplification1.7
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Signal.Multichannel:$cget from hsignal-0.2.7.1"
:herbie-target
(if (< z 2.759456554562692e-282) (+ (* (/ x y) (- z t)) t) (if (< z 2.326994450874436e-110) (+ (* x (/ (- z t) y)) t) (+ (* (/ x y) (- z t)) t)))
(+ (* (/ x y) (- z t)) t))