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 r25419341 = x;
double r25419342 = y;
double r25419343 = z;
double r25419344 = r25419342 - r25419343;
double r25419345 = t;
double r25419346 = r25419345 - r25419341;
double r25419347 = r25419344 * r25419346;
double r25419348 = a;
double r25419349 = r25419348 - r25419343;
double r25419350 = r25419347 / r25419349;
double r25419351 = r25419341 + r25419350;
return r25419351;
}
double f(double x, double y, double z, double t, double a) {
double r25419352 = z;
double r25419353 = 2.692918381213643e+179;
bool r25419354 = r25419352 <= r25419353;
double r25419355 = x;
double r25419356 = t;
double r25419357 = r25419356 - r25419355;
double r25419358 = y;
double r25419359 = r25419358 - r25419352;
double r25419360 = a;
double r25419361 = r25419360 - r25419352;
double r25419362 = r25419359 / r25419361;
double r25419363 = r25419357 * r25419362;
double r25419364 = r25419355 + r25419363;
double r25419365 = r25419355 / r25419352;
double r25419366 = r25419356 / r25419352;
double r25419367 = r25419365 - r25419366;
double r25419368 = fma(r25419358, r25419367, r25419356);
double r25419369 = r25419354 ? r25419364 : r25419368;
return r25419369;
}




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))))