x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;z \le -1.693481730440447343053929005151400954806 \cdot 10^{142} \lor \neg \left(z \le 1.89437104282510603049727594122304677999 \cdot 10^{120}\right):\\
\;\;\;\;t + y \cdot \left(\frac{x}{z} - \frac{t}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \left(\left(\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}} \cdot \sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right) \cdot \left(\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}} \cdot \frac{\sqrt[3]{t - x} \cdot \sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right)\right) \cdot \frac{\sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z}}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r475781 = x;
double r475782 = y;
double r475783 = z;
double r475784 = r475782 - r475783;
double r475785 = t;
double r475786 = r475785 - r475781;
double r475787 = r475784 * r475786;
double r475788 = a;
double r475789 = r475788 - r475783;
double r475790 = r475787 / r475789;
double r475791 = r475781 + r475790;
return r475791;
}
double f(double x, double y, double z, double t, double a) {
double r475792 = z;
double r475793 = -1.6934817304404473e+142;
bool r475794 = r475792 <= r475793;
double r475795 = 1.894371042825106e+120;
bool r475796 = r475792 <= r475795;
double r475797 = !r475796;
bool r475798 = r475794 || r475797;
double r475799 = t;
double r475800 = y;
double r475801 = x;
double r475802 = r475801 / r475792;
double r475803 = r475799 / r475792;
double r475804 = r475802 - r475803;
double r475805 = r475800 * r475804;
double r475806 = r475799 + r475805;
double r475807 = r475800 - r475792;
double r475808 = a;
double r475809 = r475808 - r475792;
double r475810 = cbrt(r475809);
double r475811 = r475810 * r475810;
double r475812 = r475807 / r475811;
double r475813 = cbrt(r475812);
double r475814 = r475813 * r475813;
double r475815 = r475799 - r475801;
double r475816 = cbrt(r475815);
double r475817 = r475816 * r475816;
double r475818 = cbrt(r475811);
double r475819 = r475817 / r475818;
double r475820 = r475813 * r475819;
double r475821 = r475814 * r475820;
double r475822 = cbrt(r475810);
double r475823 = r475816 / r475822;
double r475824 = r475821 * r475823;
double r475825 = r475801 + r475824;
double r475826 = r475798 ? r475806 : r475825;
return r475826;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.4 |
|---|---|
| Target | 11.6 |
| Herbie | 10.4 |
if z < -1.6934817304404473e+142 or 1.894371042825106e+120 < z Initial program 46.2
rmApplied add-cube-cbrt46.5
Applied times-frac23.5
rmApplied add-cube-cbrt23.6
Applied cbrt-prod23.6
Applied add-cube-cbrt23.8
Applied times-frac23.8
Applied associate-*r*23.3
rmApplied add-cube-cbrt23.4
Applied associate-*l*23.4
Taylor expanded around inf 25.5
Simplified17.1
if -1.6934817304404473e+142 < z < 1.894371042825106e+120Initial program 14.0
rmApplied add-cube-cbrt14.5
Applied times-frac7.5
rmApplied add-cube-cbrt7.5
Applied cbrt-prod7.6
Applied add-cube-cbrt7.7
Applied times-frac7.7
Applied associate-*r*7.1
rmApplied add-cube-cbrt7.2
Applied associate-*l*7.2
Final simplification10.4
herbie shell --seed 2019212
(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))))