x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -7.8100462476949922 \cdot 10^{-192} \lor \neg \left(a \le 6.9127787409822648 \cdot 10^{-128}\right):\\
\;\;\;\;x + \frac{y - x}{\left(a - t\right) \cdot \frac{1}{z - t}}\\
\mathbf{else}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r636391 = x;
double r636392 = y;
double r636393 = r636392 - r636391;
double r636394 = z;
double r636395 = t;
double r636396 = r636394 - r636395;
double r636397 = r636393 * r636396;
double r636398 = a;
double r636399 = r636398 - r636395;
double r636400 = r636397 / r636399;
double r636401 = r636391 + r636400;
return r636401;
}
double f(double x, double y, double z, double t, double a) {
double r636402 = a;
double r636403 = -7.810046247694992e-192;
bool r636404 = r636402 <= r636403;
double r636405 = 6.912778740982265e-128;
bool r636406 = r636402 <= r636405;
double r636407 = !r636406;
bool r636408 = r636404 || r636407;
double r636409 = x;
double r636410 = y;
double r636411 = r636410 - r636409;
double r636412 = t;
double r636413 = r636402 - r636412;
double r636414 = 1.0;
double r636415 = z;
double r636416 = r636415 - r636412;
double r636417 = r636414 / r636416;
double r636418 = r636413 * r636417;
double r636419 = r636411 / r636418;
double r636420 = r636409 + r636419;
double r636421 = r636409 * r636415;
double r636422 = r636421 / r636412;
double r636423 = r636410 + r636422;
double r636424 = r636415 * r636410;
double r636425 = r636424 / r636412;
double r636426 = r636423 - r636425;
double r636427 = r636408 ? r636420 : r636426;
return r636427;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 25.0 |
|---|---|
| Target | 9.5 |
| Herbie | 10.5 |
if a < -7.810046247694992e-192 or 6.912778740982265e-128 < a Initial program 23.8
rmApplied associate-/l*9.6
rmApplied div-inv9.7
if -7.810046247694992e-192 < a < 6.912778740982265e-128Initial program 29.6
Taylor expanded around inf 13.5
Final simplification10.5
herbie shell --seed 2020039
(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))))