x + \frac{y \cdot \left(z - t\right)}{z - a}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{z - a} = -\infty \lor \neg \left(\frac{y \cdot \left(z - t\right)}{z - a} \le 2.53657593812259464 \cdot 10^{301}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{z - t}{z - a}, y, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{z - a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r488461 = x;
double r488462 = y;
double r488463 = z;
double r488464 = t;
double r488465 = r488463 - r488464;
double r488466 = r488462 * r488465;
double r488467 = a;
double r488468 = r488463 - r488467;
double r488469 = r488466 / r488468;
double r488470 = r488461 + r488469;
return r488470;
}
double f(double x, double y, double z, double t, double a) {
double r488471 = y;
double r488472 = z;
double r488473 = t;
double r488474 = r488472 - r488473;
double r488475 = r488471 * r488474;
double r488476 = a;
double r488477 = r488472 - r488476;
double r488478 = r488475 / r488477;
double r488479 = -inf.0;
bool r488480 = r488478 <= r488479;
double r488481 = 2.5365759381225946e+301;
bool r488482 = r488478 <= r488481;
double r488483 = !r488482;
bool r488484 = r488480 || r488483;
double r488485 = r488474 / r488477;
double r488486 = x;
double r488487 = fma(r488485, r488471, r488486);
double r488488 = r488486 + r488478;
double r488489 = r488484 ? r488487 : r488488;
return r488489;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.9 |
|---|---|
| Target | 1.3 |
| Herbie | 0.2 |
if (/ (* y (- z t)) (- z a)) < -inf.0 or 2.5365759381225946e+301 < (/ (* y (- z t)) (- z a)) Initial program 63.8
Simplified0.2
rmApplied clear-num0.3
rmApplied fma-udef0.3
Simplified0.2
rmApplied associate-/r/0.2
Applied fma-def0.2
if -inf.0 < (/ (* y (- z t)) (- z a)) < 2.5365759381225946e+301Initial program 0.2
Final simplification0.2
herbie shell --seed 2020039 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (/ (* y (- z t)) (- z a))))