x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -1.1392530337654849 \cdot 10^{-282}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{a - t} - \frac{1}{\frac{a - t}{t}}, y - x, x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y\right) - y \cdot \frac{z}{t}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{a - t} - \frac{1}{\frac{a - t}{t}}, y - x, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r25825452 = x;
double r25825453 = y;
double r25825454 = r25825453 - r25825452;
double r25825455 = z;
double r25825456 = t;
double r25825457 = r25825455 - r25825456;
double r25825458 = r25825454 * r25825457;
double r25825459 = a;
double r25825460 = r25825459 - r25825456;
double r25825461 = r25825458 / r25825460;
double r25825462 = r25825452 + r25825461;
return r25825462;
}
double f(double x, double y, double z, double t, double a) {
double r25825463 = x;
double r25825464 = y;
double r25825465 = r25825464 - r25825463;
double r25825466 = z;
double r25825467 = t;
double r25825468 = r25825466 - r25825467;
double r25825469 = r25825465 * r25825468;
double r25825470 = a;
double r25825471 = r25825470 - r25825467;
double r25825472 = r25825469 / r25825471;
double r25825473 = r25825463 + r25825472;
double r25825474 = -1.1392530337654849e-282;
bool r25825475 = r25825473 <= r25825474;
double r25825476 = r25825466 / r25825471;
double r25825477 = 1.0;
double r25825478 = r25825471 / r25825467;
double r25825479 = r25825477 / r25825478;
double r25825480 = r25825476 - r25825479;
double r25825481 = fma(r25825480, r25825465, r25825463);
double r25825482 = 0.0;
bool r25825483 = r25825473 <= r25825482;
double r25825484 = r25825463 / r25825467;
double r25825485 = fma(r25825484, r25825466, r25825464);
double r25825486 = r25825466 / r25825467;
double r25825487 = r25825464 * r25825486;
double r25825488 = r25825485 - r25825487;
double r25825489 = r25825483 ? r25825488 : r25825481;
double r25825490 = r25825475 ? r25825481 : r25825489;
return r25825490;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 23.5 |
|---|---|
| Target | 9.4 |
| Herbie | 8.9 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -1.1392530337654849e-282 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 20.1
Simplified7.5
rmApplied div-sub7.5
rmApplied clear-num7.6
if -1.1392530337654849e-282 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 58.8
Simplified58.8
Taylor expanded around inf 19.8
Simplified22.2
Final simplification8.9
herbie shell --seed 2019158 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
: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))))