x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z} \le -1.20080531218694779373582477752182757726 \cdot 10^{-290} \lor \neg \left(x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z} \le 0.0\right):\\
\;\;\;\;x + \left(\frac{\sqrt[3]{y - z} \cdot \sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \left(\frac{\sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \left(\sqrt[3]{t - x} \cdot \sqrt[3]{t - x}\right)\right)\right) \cdot \frac{\sqrt[3]{t - x}}{\sqrt[3]{a - z}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + t\right) - \frac{t \cdot y}{z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r478760 = x;
double r478761 = y;
double r478762 = z;
double r478763 = r478761 - r478762;
double r478764 = t;
double r478765 = r478764 - r478760;
double r478766 = r478763 * r478765;
double r478767 = a;
double r478768 = r478767 - r478762;
double r478769 = r478766 / r478768;
double r478770 = r478760 + r478769;
return r478770;
}
double f(double x, double y, double z, double t, double a) {
double r478771 = x;
double r478772 = y;
double r478773 = z;
double r478774 = r478772 - r478773;
double r478775 = t;
double r478776 = r478775 - r478771;
double r478777 = r478774 * r478776;
double r478778 = a;
double r478779 = r478778 - r478773;
double r478780 = r478777 / r478779;
double r478781 = r478771 + r478780;
double r478782 = -1.2008053121869478e-290;
bool r478783 = r478781 <= r478782;
double r478784 = 0.0;
bool r478785 = r478781 <= r478784;
double r478786 = !r478785;
bool r478787 = r478783 || r478786;
double r478788 = cbrt(r478774);
double r478789 = r478788 * r478788;
double r478790 = cbrt(r478779);
double r478791 = r478789 / r478790;
double r478792 = r478788 / r478790;
double r478793 = cbrt(r478776);
double r478794 = r478793 * r478793;
double r478795 = r478792 * r478794;
double r478796 = r478791 * r478795;
double r478797 = r478793 / r478790;
double r478798 = r478796 * r478797;
double r478799 = r478771 + r478798;
double r478800 = r478771 * r478772;
double r478801 = r478800 / r478773;
double r478802 = r478801 + r478775;
double r478803 = r478775 * r478772;
double r478804 = r478803 / r478773;
double r478805 = r478802 - r478804;
double r478806 = r478787 ? r478799 : r478805;
return r478806;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.5 |
|---|---|
| Target | 12.0 |
| Herbie | 8.5 |
if (+ x (/ (* (- y z) (- t x)) (- a z))) < -1.2008053121869478e-290 or 0.0 < (+ x (/ (* (- y z) (- t x)) (- a z))) Initial program 21.2
rmApplied add-cube-cbrt21.7
Applied times-frac8.4
rmApplied *-un-lft-identity8.4
Applied cbrt-prod8.4
Applied add-cube-cbrt8.5
Applied times-frac8.5
Applied associate-*r*7.9
Simplified7.9
rmApplied add-cube-cbrt7.9
Applied times-frac7.9
Applied associate-*l*7.5
if -1.2008053121869478e-290 < (+ x (/ (* (- y z) (- t x)) (- a z))) < 0.0Initial program 59.7
Taylor expanded around inf 19.0
Final simplification8.5
herbie shell --seed 2019305
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< z -1.25361310560950359e188) (- t (* (/ y z) (- t x))) (if (< z 4.44670236911381103e64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))