x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -5.320969638428747173313987171830805703802 \cdot 10^{-139} \lor \neg \left(a \le 9.616031131563334674698731158316533821258 \cdot 10^{-161}\right):\\
\;\;\;\;\left(y - x\right) \cdot \frac{z - t}{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 r432790 = x;
double r432791 = y;
double r432792 = r432791 - r432790;
double r432793 = z;
double r432794 = t;
double r432795 = r432793 - r432794;
double r432796 = r432792 * r432795;
double r432797 = a;
double r432798 = r432797 - r432794;
double r432799 = r432796 / r432798;
double r432800 = r432790 + r432799;
return r432800;
}
double f(double x, double y, double z, double t, double a) {
double r432801 = a;
double r432802 = -5.320969638428747e-139;
bool r432803 = r432801 <= r432802;
double r432804 = 9.616031131563335e-161;
bool r432805 = r432801 <= r432804;
double r432806 = !r432805;
bool r432807 = r432803 || r432806;
double r432808 = y;
double r432809 = x;
double r432810 = r432808 - r432809;
double r432811 = z;
double r432812 = t;
double r432813 = r432811 - r432812;
double r432814 = r432801 - r432812;
double r432815 = r432813 / r432814;
double r432816 = r432810 * r432815;
double r432817 = r432816 + r432809;
double r432818 = r432809 / r432812;
double r432819 = r432811 * r432808;
double r432820 = r432819 / r432812;
double r432821 = r432808 - r432820;
double r432822 = fma(r432818, r432811, r432821);
double r432823 = r432807 ? r432817 : r432822;
return r432823;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.4 |
|---|---|
| Target | 9.1 |
| Herbie | 9.8 |
if a < -5.320969638428747e-139 or 9.616031131563335e-161 < a Initial program 22.9
Simplified11.7
rmApplied fma-udef11.7
rmApplied div-inv11.8
Applied associate-*l*9.2
Simplified9.2
if -5.320969638428747e-139 < a < 9.616031131563335e-161Initial program 29.6
Simplified24.7
rmApplied fma-udef24.7
rmApplied div-inv24.8
Applied associate-*l*21.0
Simplified20.9
Taylor expanded around inf 12.4
Simplified12.1
Final simplification9.8
herbie shell --seed 2019208 +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.7744031700831742e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))