x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -1.412817968155474110031154369936852929036 \cdot 10^{-161} \lor \neg \left(a \le 2.219619941201998086570163040392435385112 \cdot 10^{-195}\right):\\
\;\;\;\;\mathsf{fma}\left(y - x, 1 \cdot \frac{z - t}{a - t}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y - \frac{z \cdot y}{t}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r601444 = x;
double r601445 = y;
double r601446 = r601445 - r601444;
double r601447 = z;
double r601448 = t;
double r601449 = r601447 - r601448;
double r601450 = r601446 * r601449;
double r601451 = a;
double r601452 = r601451 - r601448;
double r601453 = r601450 / r601452;
double r601454 = r601444 + r601453;
return r601454;
}
double f(double x, double y, double z, double t, double a) {
double r601455 = a;
double r601456 = -1.4128179681554741e-161;
bool r601457 = r601455 <= r601456;
double r601458 = 2.219619941201998e-195;
bool r601459 = r601455 <= r601458;
double r601460 = !r601459;
bool r601461 = r601457 || r601460;
double r601462 = y;
double r601463 = x;
double r601464 = r601462 - r601463;
double r601465 = 1.0;
double r601466 = z;
double r601467 = t;
double r601468 = r601466 - r601467;
double r601469 = r601455 - r601467;
double r601470 = r601468 / r601469;
double r601471 = r601465 * r601470;
double r601472 = fma(r601464, r601471, r601463);
double r601473 = r601463 / r601467;
double r601474 = r601466 * r601462;
double r601475 = r601474 / r601467;
double r601476 = r601462 - r601475;
double r601477 = fma(r601473, r601466, r601476);
double r601478 = r601461 ? r601472 : r601477;
return r601478;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.4 |
|---|---|
| Target | 9.1 |
| Herbie | 10.1 |
if a < -1.4128179681554741e-161 or 2.219619941201998e-195 < a Initial program 23.1
Simplified12.3
rmApplied fma-udef12.4
rmApplied div-inv12.4
Applied associate-*l*9.9
Simplified9.8
rmApplied *-un-lft-identity9.8
Applied *-un-lft-identity9.8
Applied times-frac9.8
Simplified9.8
rmApplied fma-def9.8
if -1.4128179681554741e-161 < a < 2.219619941201998e-195Initial program 30.2
Simplified25.8
rmApplied fma-udef25.8
rmApplied div-inv25.9
Applied associate-*l*20.5
Simplified20.4
Taylor expanded around inf 11.6
Simplified11.3
Final simplification10.1
herbie shell --seed 2019354 +o rules:numerics
(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))))