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 1.566452066364055 \cdot 10^{119}\right):\\
\;\;\;\;x + y \cdot \frac{z - t}{z - a}\\
\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 r580656 = x;
double r580657 = y;
double r580658 = z;
double r580659 = t;
double r580660 = r580658 - r580659;
double r580661 = r580657 * r580660;
double r580662 = a;
double r580663 = r580658 - r580662;
double r580664 = r580661 / r580663;
double r580665 = r580656 + r580664;
return r580665;
}
double f(double x, double y, double z, double t, double a) {
double r580666 = y;
double r580667 = z;
double r580668 = t;
double r580669 = r580667 - r580668;
double r580670 = r580666 * r580669;
double r580671 = a;
double r580672 = r580667 - r580671;
double r580673 = r580670 / r580672;
double r580674 = -inf.0;
bool r580675 = r580673 <= r580674;
double r580676 = 1.5664520663640548e+119;
bool r580677 = r580673 <= r580676;
double r580678 = !r580677;
bool r580679 = r580675 || r580678;
double r580680 = x;
double r580681 = r580669 / r580672;
double r580682 = r580666 * r580681;
double r580683 = r580680 + r580682;
double r580684 = r580680 + r580673;
double r580685 = r580679 ? r580683 : r580684;
return r580685;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.6 |
|---|---|
| Target | 1.3 |
| Herbie | 0.7 |
if (/ (* y (- z t)) (- z a)) < -inf.0 or 1.5664520663640548e+119 < (/ (* y (- z t)) (- z a)) Initial program 44.8
rmApplied *-un-lft-identity44.8
Applied times-frac2.1
Simplified2.1
if -inf.0 < (/ (* y (- z t)) (- z a)) < 1.5664520663640548e+119Initial program 0.3
Final simplification0.7
herbie shell --seed 2020035 +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))))