x + \frac{y \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{a - t} = -\infty \lor \neg \left(\frac{y \cdot \left(z - t\right)}{a - t} \le 5.105950757333242047287578696854372670873 \cdot 10^{306}\right):\\
\;\;\;\;\frac{z}{\frac{a - t}{y}} - \left(\frac{t}{\frac{a - t}{y}} - x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r363515 = x;
double r363516 = y;
double r363517 = z;
double r363518 = t;
double r363519 = r363517 - r363518;
double r363520 = r363516 * r363519;
double r363521 = a;
double r363522 = r363521 - r363518;
double r363523 = r363520 / r363522;
double r363524 = r363515 + r363523;
return r363524;
}
double f(double x, double y, double z, double t, double a) {
double r363525 = y;
double r363526 = z;
double r363527 = t;
double r363528 = r363526 - r363527;
double r363529 = r363525 * r363528;
double r363530 = a;
double r363531 = r363530 - r363527;
double r363532 = r363529 / r363531;
double r363533 = -inf.0;
bool r363534 = r363532 <= r363533;
double r363535 = 5.105950757333242e+306;
bool r363536 = r363532 <= r363535;
double r363537 = !r363536;
bool r363538 = r363534 || r363537;
double r363539 = r363531 / r363525;
double r363540 = r363526 / r363539;
double r363541 = r363527 / r363539;
double r363542 = x;
double r363543 = r363541 - r363542;
double r363544 = r363540 - r363543;
double r363545 = r363542 + r363532;
double r363546 = r363538 ? r363544 : r363545;
return r363546;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.4 |
|---|---|
| Target | 1.5 |
| Herbie | 0.2 |
if (/ (* y (- z t)) (- a t)) < -inf.0 or 5.105950757333242e+306 < (/ (* y (- z t)) (- a t)) Initial program 63.8
Simplified0.3
rmApplied clear-num0.4
rmApplied fma-udef0.4
Simplified0.3
rmApplied div-sub0.3
Applied associate-+l-0.3
if -inf.0 < (/ (* y (- z t)) (- a t)) < 5.105950757333242e+306Initial program 0.2
Final simplification0.2
herbie shell --seed 2019325 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(+ x (/ y (/ (- a t) (- z t))))
(+ x (/ (* y (- z t)) (- a t))))