x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;t \le 2.34703852665204316 \cdot 10^{195}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z - t}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r721977 = x;
double r721978 = y;
double r721979 = r721978 - r721977;
double r721980 = z;
double r721981 = t;
double r721982 = r721980 - r721981;
double r721983 = r721979 * r721982;
double r721984 = a;
double r721985 = r721984 - r721981;
double r721986 = r721983 / r721985;
double r721987 = r721977 + r721986;
return r721987;
}
double f(double x, double y, double z, double t, double a) {
double r721988 = t;
double r721989 = 2.347038526652043e+195;
bool r721990 = r721988 <= r721989;
double r721991 = x;
double r721992 = y;
double r721993 = r721992 - r721991;
double r721994 = z;
double r721995 = r721994 - r721988;
double r721996 = a;
double r721997 = r721996 - r721988;
double r721998 = r721995 / r721997;
double r721999 = r721993 * r721998;
double r722000 = r721991 + r721999;
double r722001 = r721991 * r721994;
double r722002 = r722001 / r721988;
double r722003 = r721992 + r722002;
double r722004 = r721994 * r721992;
double r722005 = r722004 / r721988;
double r722006 = r722003 - r722005;
double r722007 = r721990 ? r722000 : r722006;
return r722007;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 25.2 |
|---|---|
| Target | 9.4 |
| Herbie | 12.1 |
if t < 2.347038526652043e+195Initial program 22.0
rmApplied *-un-lft-identity22.0
Applied times-frac10.5
Simplified10.5
if 2.347038526652043e+195 < t Initial program 51.6
Taylor expanded around inf 25.4
Final simplification12.1
herbie shell --seed 2020060
(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))))