x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -1.50374357984312286 \cdot 10^{-108} \lor \neg \left(a \le -9.9251003126439114 \cdot 10^{-170}\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 r684972 = x;
double r684973 = y;
double r684974 = r684973 - r684972;
double r684975 = z;
double r684976 = t;
double r684977 = r684975 - r684976;
double r684978 = r684974 * r684977;
double r684979 = a;
double r684980 = r684979 - r684976;
double r684981 = r684978 / r684980;
double r684982 = r684972 + r684981;
return r684982;
}
double f(double x, double y, double z, double t, double a) {
double r684983 = a;
double r684984 = -1.5037435798431229e-108;
bool r684985 = r684983 <= r684984;
double r684986 = -9.925100312643911e-170;
bool r684987 = r684983 <= r684986;
double r684988 = !r684987;
bool r684989 = r684985 || r684988;
double r684990 = y;
double r684991 = x;
double r684992 = r684990 - r684991;
double r684993 = z;
double r684994 = t;
double r684995 = r684993 - r684994;
double r684996 = r684983 - r684994;
double r684997 = r684995 / r684996;
double r684998 = r684992 * r684997;
double r684999 = r684998 + r684991;
double r685000 = r684991 / r684994;
double r685001 = r684993 * r684990;
double r685002 = r685001 / r684994;
double r685003 = r684990 - r685002;
double r685004 = fma(r685000, r684993, r685003);
double r685005 = r684989 ? r684999 : r685004;
return r685005;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 25.2 |
|---|---|
| Target | 9.3 |
| Herbie | 12.0 |
if a < -1.5037435798431229e-108 or -9.925100312643911e-170 < a Initial program 25.1
Simplified14.6
rmApplied fma-udef14.7
rmApplied div-inv14.7
Applied associate-*l*11.6
Simplified11.5
if -1.5037435798431229e-108 < a < -9.925100312643911e-170Initial program 28.1
Simplified26.5
rmApplied fma-udef26.6
rmApplied div-inv26.6
Applied associate-*l*20.7
Simplified20.7
Taylor expanded around inf 22.9
Simplified21.0
Final simplification12.0
herbie shell --seed 2020021 +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))))