x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -1.857258472878047342686922637475217130218 \cdot 10^{143} \lor \neg \left(t \le 8.281375759210086334394664376626091105613 \cdot 10^{228}\right):\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{1}{\frac{a - t}{z - t}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r460046 = x;
double r460047 = y;
double r460048 = r460047 - r460046;
double r460049 = z;
double r460050 = t;
double r460051 = r460049 - r460050;
double r460052 = r460048 * r460051;
double r460053 = a;
double r460054 = r460053 - r460050;
double r460055 = r460052 / r460054;
double r460056 = r460046 + r460055;
return r460056;
}
double f(double x, double y, double z, double t, double a) {
double r460057 = t;
double r460058 = -1.8572584728780473e+143;
bool r460059 = r460057 <= r460058;
double r460060 = 8.281375759210086e+228;
bool r460061 = r460057 <= r460060;
double r460062 = !r460061;
bool r460063 = r460059 || r460062;
double r460064 = y;
double r460065 = x;
double r460066 = z;
double r460067 = r460065 * r460066;
double r460068 = r460067 / r460057;
double r460069 = r460064 + r460068;
double r460070 = r460066 * r460064;
double r460071 = r460070 / r460057;
double r460072 = r460069 - r460071;
double r460073 = r460064 - r460065;
double r460074 = 1.0;
double r460075 = a;
double r460076 = r460075 - r460057;
double r460077 = r460066 - r460057;
double r460078 = r460076 / r460077;
double r460079 = r460074 / r460078;
double r460080 = r460073 * r460079;
double r460081 = r460065 + r460080;
double r460082 = r460063 ? r460072 : r460081;
return r460082;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.6 |
|---|---|
| Target | 9.4 |
| Herbie | 11.9 |
if t < -1.8572584728780473e+143 or 8.281375759210086e+228 < t Initial program 48.7
Taylor expanded around inf 24.0
if -1.8572584728780473e+143 < t < 8.281375759210086e+228Initial program 17.4
rmApplied associate-/l*8.2
rmApplied div-inv8.3
Final simplification11.9
herbie shell --seed 1978988140
(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))))