x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -3.29505595240201798 \cdot 10^{-290} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\right):\\
\;\;\;\;\left(\left(z - t\right) \cdot \frac{\sqrt[3]{y - x} \cdot \sqrt[3]{y - x}}{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}\right) \cdot \frac{\sqrt[3]{y - x}}{\sqrt[3]{a - t}} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y - \frac{z \cdot y}{t}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r632765 = x;
double r632766 = y;
double r632767 = r632766 - r632765;
double r632768 = z;
double r632769 = t;
double r632770 = r632768 - r632769;
double r632771 = r632767 * r632770;
double r632772 = a;
double r632773 = r632772 - r632769;
double r632774 = r632771 / r632773;
double r632775 = r632765 + r632774;
return r632775;
}
double f(double x, double y, double z, double t, double a) {
double r632776 = x;
double r632777 = y;
double r632778 = r632777 - r632776;
double r632779 = z;
double r632780 = t;
double r632781 = r632779 - r632780;
double r632782 = r632778 * r632781;
double r632783 = a;
double r632784 = r632783 - r632780;
double r632785 = r632782 / r632784;
double r632786 = r632776 + r632785;
double r632787 = -3.295055952402018e-290;
bool r632788 = r632786 <= r632787;
double r632789 = 0.0;
bool r632790 = r632786 <= r632789;
double r632791 = !r632790;
bool r632792 = r632788 || r632791;
double r632793 = cbrt(r632778);
double r632794 = r632793 * r632793;
double r632795 = cbrt(r632784);
double r632796 = r632795 * r632795;
double r632797 = r632794 / r632796;
double r632798 = r632781 * r632797;
double r632799 = r632793 / r632795;
double r632800 = r632798 * r632799;
double r632801 = r632800 + r632776;
double r632802 = r632776 / r632780;
double r632803 = r632779 * r632777;
double r632804 = r632803 / r632780;
double r632805 = r632777 - r632804;
double r632806 = fma(r632802, r632779, r632805);
double r632807 = r632792 ? r632801 : r632806;
return r632807;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.3 |
|---|---|
| Target | 9.4 |
| Herbie | 9.2 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -3.295055952402018e-290 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.2
Simplified10.8
rmApplied div-inv10.9
rmApplied fma-udef10.9
Simplified10.8
rmApplied add-cube-cbrt11.4
Applied add-cube-cbrt11.6
Applied times-frac11.6
Applied associate-*r*8.0
if -3.295055952402018e-290 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 59.7
Simplified59.6
rmApplied div-inv59.5
rmApplied fma-udef59.6
Simplified59.8
Taylor expanded around inf 19.3
Simplified22.6
Final simplification9.2
herbie shell --seed 2020056 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))