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 -7.342154535502761255002856483850094084641 \cdot 10^{299}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{1}{z - t} \cdot \left(a - t\right)}, y - x, x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -9.503126818275096710413076784731225675465 \cdot 10^{-107}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -4.184043045677409878056891844086754114776 \cdot 10^{-280} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{1}{z - t} \cdot \left(a - t\right)}, y - x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y\right) - \frac{z}{t} \cdot y\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r577927 = x;
double r577928 = y;
double r577929 = r577928 - r577927;
double r577930 = z;
double r577931 = t;
double r577932 = r577930 - r577931;
double r577933 = r577929 * r577932;
double r577934 = a;
double r577935 = r577934 - r577931;
double r577936 = r577933 / r577935;
double r577937 = r577927 + r577936;
return r577937;
}
double f(double x, double y, double z, double t, double a) {
double r577938 = x;
double r577939 = y;
double r577940 = r577939 - r577938;
double r577941 = z;
double r577942 = t;
double r577943 = r577941 - r577942;
double r577944 = r577940 * r577943;
double r577945 = a;
double r577946 = r577945 - r577942;
double r577947 = r577944 / r577946;
double r577948 = r577938 + r577947;
double r577949 = -7.342154535502761e+299;
bool r577950 = r577948 <= r577949;
double r577951 = 1.0;
double r577952 = r577951 / r577943;
double r577953 = r577952 * r577946;
double r577954 = r577951 / r577953;
double r577955 = fma(r577954, r577940, r577938);
double r577956 = -9.503126818275097e-107;
bool r577957 = r577948 <= r577956;
double r577958 = -4.18404304567741e-280;
bool r577959 = r577948 <= r577958;
double r577960 = 0.0;
bool r577961 = r577948 <= r577960;
double r577962 = !r577961;
bool r577963 = r577959 || r577962;
double r577964 = r577938 / r577942;
double r577965 = fma(r577964, r577941, r577939);
double r577966 = r577941 / r577942;
double r577967 = r577966 * r577939;
double r577968 = r577965 - r577967;
double r577969 = r577963 ? r577955 : r577968;
double r577970 = r577957 ? r577948 : r577969;
double r577971 = r577950 ? r577955 : r577970;
return r577971;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.7 |
|---|---|
| Target | 9.4 |
| Herbie | 8.4 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -7.342154535502761e+299 or -9.503126818275097e-107 < (+ x (/ (* (- y x) (- z t)) (- a t))) < -4.18404304567741e-280 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 29.1
Simplified9.2
rmApplied clear-num9.3
rmApplied div-inv9.3
if -7.342154535502761e+299 < (+ x (/ (* (- y x) (- z t)) (- a t))) < -9.503126818275097e-107Initial program 1.7
if -4.18404304567741e-280 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 59.5
Simplified59.5
Taylor expanded around inf 19.1
Simplified21.6
Final simplification8.4
herbie shell --seed 2019194 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))