x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;z \le 2.692918381213642726516273228742192808541 \cdot 10^{179}:\\
\;\;\;\;x + \left(t - x\right) \cdot \frac{y - z}{a - z}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{x}{z} - \frac{t}{z}, t\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r21812462 = x;
double r21812463 = y;
double r21812464 = z;
double r21812465 = r21812463 - r21812464;
double r21812466 = t;
double r21812467 = r21812466 - r21812462;
double r21812468 = r21812465 * r21812467;
double r21812469 = a;
double r21812470 = r21812469 - r21812464;
double r21812471 = r21812468 / r21812470;
double r21812472 = r21812462 + r21812471;
return r21812472;
}
double f(double x, double y, double z, double t, double a) {
double r21812473 = z;
double r21812474 = 2.692918381213643e+179;
bool r21812475 = r21812473 <= r21812474;
double r21812476 = x;
double r21812477 = t;
double r21812478 = r21812477 - r21812476;
double r21812479 = y;
double r21812480 = r21812479 - r21812473;
double r21812481 = a;
double r21812482 = r21812481 - r21812473;
double r21812483 = r21812480 / r21812482;
double r21812484 = r21812478 * r21812483;
double r21812485 = r21812476 + r21812484;
double r21812486 = r21812476 / r21812473;
double r21812487 = r21812477 / r21812473;
double r21812488 = r21812486 - r21812487;
double r21812489 = fma(r21812479, r21812488, r21812477);
double r21812490 = r21812475 ? r21812485 : r21812489;
return r21812490;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.1 |
|---|---|
| Target | 12.1 |
| Herbie | 10.5 |
if z < 2.692918381213643e+179Initial program 20.8
Simplified12.8
rmApplied fma-udef12.8
rmApplied div-inv12.9
Applied associate-*l*10.1
Simplified10.1
if 2.692918381213643e+179 < z Initial program 47.8
Simplified29.0
rmApplied fma-udef29.1
rmApplied div-inv29.1
Applied associate-*l*22.9
Simplified22.8
rmApplied add-cube-cbrt23.1
Applied associate-*r*23.1
Taylor expanded around inf 24.4
Simplified14.0
Final simplification10.5
herbie shell --seed 2019172 +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))))