x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -1.5165747926583058 \cdot 10^{-205} \lor \neg \left(a \le 1.1030275495192448 \cdot 10^{-211}\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 r627780 = x;
double r627781 = y;
double r627782 = r627781 - r627780;
double r627783 = z;
double r627784 = t;
double r627785 = r627783 - r627784;
double r627786 = r627782 * r627785;
double r627787 = a;
double r627788 = r627787 - r627784;
double r627789 = r627786 / r627788;
double r627790 = r627780 + r627789;
return r627790;
}
double f(double x, double y, double z, double t, double a) {
double r627791 = a;
double r627792 = -1.5165747926583058e-205;
bool r627793 = r627791 <= r627792;
double r627794 = 1.1030275495192448e-211;
bool r627795 = r627791 <= r627794;
double r627796 = !r627795;
bool r627797 = r627793 || r627796;
double r627798 = y;
double r627799 = x;
double r627800 = r627798 - r627799;
double r627801 = z;
double r627802 = t;
double r627803 = r627801 - r627802;
double r627804 = r627791 - r627802;
double r627805 = r627803 / r627804;
double r627806 = r627800 * r627805;
double r627807 = r627806 + r627799;
double r627808 = r627799 / r627802;
double r627809 = r627801 * r627798;
double r627810 = r627809 / r627802;
double r627811 = r627798 - r627810;
double r627812 = fma(r627808, r627801, r627811);
double r627813 = r627797 ? r627807 : r627812;
return r627813;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.5 |
|---|---|
| Target | 9.2 |
| Herbie | 10.4 |
if a < -1.5165747926583058e-205 or 1.1030275495192448e-211 < a Initial program 23.7
Simplified13.1
rmApplied fma-udef13.2
rmApplied div-inv13.3
Applied associate-*l*10.5
Simplified10.5
if -1.5165747926583058e-205 < a < 1.1030275495192448e-211Initial program 29.4
Simplified23.3
rmApplied fma-udef23.3
rmApplied div-inv23.4
Applied associate-*l*18.4
Simplified18.3
Taylor expanded around inf 10.7
Simplified9.9
Final simplification10.4
herbie shell --seed 2020046 +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))))