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.6014998280134076 \cdot 10^{-273} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\right):\\
\;\;\;\;\mathsf{fma}\left(y - x, \frac{z - t}{a - t}, x\right)\\
\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 r634797 = x;
double r634798 = y;
double r634799 = r634798 - r634797;
double r634800 = z;
double r634801 = t;
double r634802 = r634800 - r634801;
double r634803 = r634799 * r634802;
double r634804 = a;
double r634805 = r634804 - r634801;
double r634806 = r634803 / r634805;
double r634807 = r634797 + r634806;
return r634807;
}
double f(double x, double y, double z, double t, double a) {
double r634808 = x;
double r634809 = y;
double r634810 = r634809 - r634808;
double r634811 = z;
double r634812 = t;
double r634813 = r634811 - r634812;
double r634814 = r634810 * r634813;
double r634815 = a;
double r634816 = r634815 - r634812;
double r634817 = r634814 / r634816;
double r634818 = r634808 + r634817;
double r634819 = -3.6014998280134076e-273;
bool r634820 = r634818 <= r634819;
double r634821 = 0.0;
bool r634822 = r634818 <= r634821;
double r634823 = !r634822;
bool r634824 = r634820 || r634823;
double r634825 = r634813 / r634816;
double r634826 = fma(r634810, r634825, r634808);
double r634827 = r634808 / r634812;
double r634828 = r634811 * r634809;
double r634829 = r634828 / r634812;
double r634830 = r634809 - r634829;
double r634831 = fma(r634827, r634811, r634830);
double r634832 = r634824 ? r634826 : r634831;
return r634832;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.1 |
|---|---|
| Target | 9.0 |
| Herbie | 8.4 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -3.6014998280134076e-273 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 20.9
Simplified10.5
rmApplied fma-udef10.5
rmApplied div-inv10.6
Applied associate-*l*7.2
Simplified7.2
rmApplied fma-def7.2
if -3.6014998280134076e-273 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 58.4
Simplified58.7
rmApplied fma-udef58.9
rmApplied div-inv58.9
Applied associate-*l*58.3
Simplified58.3
Taylor expanded around inf 19.6
Simplified21.6
Final simplification8.4
herbie shell --seed 2020024 +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))))