x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -1.348935976238446135447285261817671628371 \cdot 10^{-173} \lor \neg \left(a \le 4.854445287131612754701281659543646156092 \cdot 10^{-114}\right):\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z - t}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot z}{t} + \left(y - \frac{z \cdot y}{t}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r532476 = x;
double r532477 = y;
double r532478 = r532477 - r532476;
double r532479 = z;
double r532480 = t;
double r532481 = r532479 - r532480;
double r532482 = r532478 * r532481;
double r532483 = a;
double r532484 = r532483 - r532480;
double r532485 = r532482 / r532484;
double r532486 = r532476 + r532485;
return r532486;
}
double f(double x, double y, double z, double t, double a) {
double r532487 = a;
double r532488 = -1.3489359762384461e-173;
bool r532489 = r532487 <= r532488;
double r532490 = 4.854445287131613e-114;
bool r532491 = r532487 <= r532490;
double r532492 = !r532491;
bool r532493 = r532489 || r532492;
double r532494 = x;
double r532495 = y;
double r532496 = r532495 - r532494;
double r532497 = z;
double r532498 = t;
double r532499 = r532497 - r532498;
double r532500 = r532487 - r532498;
double r532501 = r532499 / r532500;
double r532502 = r532496 * r532501;
double r532503 = r532494 + r532502;
double r532504 = r532494 * r532497;
double r532505 = r532504 / r532498;
double r532506 = r532497 * r532495;
double r532507 = r532506 / r532498;
double r532508 = r532495 - r532507;
double r532509 = r532505 + r532508;
double r532510 = r532493 ? r532503 : r532509;
return r532510;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.8 |
|---|---|
| Target | 9.3 |
| Herbie | 10.5 |
if a < -1.3489359762384461e-173 or 4.854445287131613e-114 < a Initial program 23.2
Simplified11.9
rmApplied div-inv12.0
Applied associate-*l*9.3
Simplified9.3
if -1.3489359762384461e-173 < a < 4.854445287131613e-114Initial program 29.7
Simplified25.7
rmApplied div-inv25.8
Applied associate-*l*20.2
Simplified20.1
Taylor expanded around inf 14.3
Simplified14.3
Final simplification10.5
herbie shell --seed 2019196
(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.0) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))