x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -5.0386299408790279 \cdot 10^{-180} \lor \neg \left(a \le 4.41666153153843721 \cdot 10^{-92}\right):\\
\;\;\;\;\frac{z}{\frac{a - t}{y - x}} - \mathsf{fma}\left(\frac{t}{a - t}, y - x, -1 \cdot 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 r648376 = x;
double r648377 = y;
double r648378 = r648377 - r648376;
double r648379 = z;
double r648380 = t;
double r648381 = r648379 - r648380;
double r648382 = r648378 * r648381;
double r648383 = a;
double r648384 = r648383 - r648380;
double r648385 = r648382 / r648384;
double r648386 = r648376 + r648385;
return r648386;
}
double f(double x, double y, double z, double t, double a) {
double r648387 = a;
double r648388 = -5.038629940879028e-180;
bool r648389 = r648387 <= r648388;
double r648390 = 4.416661531538437e-92;
bool r648391 = r648387 <= r648390;
double r648392 = !r648391;
bool r648393 = r648389 || r648392;
double r648394 = z;
double r648395 = t;
double r648396 = r648387 - r648395;
double r648397 = y;
double r648398 = x;
double r648399 = r648397 - r648398;
double r648400 = r648396 / r648399;
double r648401 = r648394 / r648400;
double r648402 = r648395 / r648396;
double r648403 = -1.0;
double r648404 = r648403 * r648398;
double r648405 = fma(r648402, r648399, r648404);
double r648406 = r648401 - r648405;
double r648407 = r648398 / r648395;
double r648408 = r648394 * r648397;
double r648409 = r648408 / r648395;
double r648410 = r648397 - r648409;
double r648411 = fma(r648407, r648394, r648410);
double r648412 = r648393 ? r648406 : r648411;
return r648412;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.6 |
|---|---|
| Target | 9.1 |
| Herbie | 9.6 |
if a < -5.038629940879028e-180 or 4.416661531538437e-92 < a Initial program 23.0
Simplified11.1
rmApplied clear-num11.4
rmApplied fma-udef11.5
Simplified11.2
rmApplied div-sub11.2
Applied associate-+l-9.8
rmApplied associate-/r/8.3
Applied fma-neg8.3
Simplified8.3
if -5.038629940879028e-180 < a < 4.416661531538437e-92Initial program 29.4
Simplified24.9
rmApplied clear-num25.2
rmApplied fma-udef25.3
Simplified24.9
Taylor expanded around inf 14.6
Simplified13.8
Final simplification9.6
herbie shell --seed 2020027 +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))))