x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;z \le 9.405156079127402373396803314253208936876 \cdot 10^{225}:\\
\;\;\;\;x + \frac{t - x}{\frac{a - z}{y - z}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x}{z} - \frac{t}{z}\right) \cdot y + t\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r462242 = x;
double r462243 = y;
double r462244 = z;
double r462245 = r462243 - r462244;
double r462246 = t;
double r462247 = r462246 - r462242;
double r462248 = r462245 * r462247;
double r462249 = a;
double r462250 = r462249 - r462244;
double r462251 = r462248 / r462250;
double r462252 = r462242 + r462251;
return r462252;
}
double f(double x, double y, double z, double t, double a) {
double r462253 = z;
double r462254 = 9.405156079127402e+225;
bool r462255 = r462253 <= r462254;
double r462256 = x;
double r462257 = t;
double r462258 = r462257 - r462256;
double r462259 = a;
double r462260 = r462259 - r462253;
double r462261 = y;
double r462262 = r462261 - r462253;
double r462263 = r462260 / r462262;
double r462264 = r462258 / r462263;
double r462265 = r462256 + r462264;
double r462266 = r462256 / r462253;
double r462267 = r462257 / r462253;
double r462268 = r462266 - r462267;
double r462269 = r462268 * r462261;
double r462270 = r462269 + r462257;
double r462271 = r462255 ? r462265 : r462270;
return r462271;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.9 |
|---|---|
| Target | 11.8 |
| Herbie | 10.6 |
if z < 9.405156079127402e+225Initial program 22.4
Simplified10.3
rmApplied fma-udef10.3
Simplified10.3
if 9.405156079127402e+225 < z Initial program 50.7
Simplified25.7
Taylor expanded around inf 21.6
Simplified13.6
Final simplification10.6
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:herbie-target
(if (< z -1.2536131056095036e+188) (- t (* (/ y z) (- t x))) (if (< z 4.446702369113811e+64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))