x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;y \le 1.144579354597698470869525383015031043462 \cdot 10^{-177} \lor \neg \left(y \le 6.273265383924108098562083329295224955425 \cdot 10^{-85}\right):\\
\;\;\;\;x + \frac{1}{\frac{a - t}{z - t}} \cdot y\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{a - t} \cdot \left(-t\right) + \left(x + \frac{y \cdot z}{a - t}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r498757 = x;
double r498758 = y;
double r498759 = z;
double r498760 = t;
double r498761 = r498759 - r498760;
double r498762 = a;
double r498763 = r498762 - r498760;
double r498764 = r498761 / r498763;
double r498765 = r498758 * r498764;
double r498766 = r498757 + r498765;
return r498766;
}
double f(double x, double y, double z, double t, double a) {
double r498767 = y;
double r498768 = 1.1445793545976985e-177;
bool r498769 = r498767 <= r498768;
double r498770 = 6.273265383924108e-85;
bool r498771 = r498767 <= r498770;
double r498772 = !r498771;
bool r498773 = r498769 || r498772;
double r498774 = x;
double r498775 = 1.0;
double r498776 = a;
double r498777 = t;
double r498778 = r498776 - r498777;
double r498779 = z;
double r498780 = r498779 - r498777;
double r498781 = r498778 / r498780;
double r498782 = r498775 / r498781;
double r498783 = r498782 * r498767;
double r498784 = r498774 + r498783;
double r498785 = r498767 / r498778;
double r498786 = -r498777;
double r498787 = r498785 * r498786;
double r498788 = r498767 * r498779;
double r498789 = r498788 / r498778;
double r498790 = r498774 + r498789;
double r498791 = r498787 + r498790;
double r498792 = r498773 ? r498784 : r498791;
return r498792;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.3 |
|---|---|
| Target | 0.4 |
| Herbie | 1.4 |
if y < 1.1445793545976985e-177 or 6.273265383924108e-85 < y Initial program 1.2
rmApplied clear-num1.2
if 1.1445793545976985e-177 < y < 6.273265383924108e-85Initial program 3.0
rmApplied clear-num3.0
rmApplied associate-/r/3.0
Applied associate-*r*4.8
Simplified4.8
rmApplied sub-neg4.8
Applied distribute-lft-in4.8
Applied associate-+r+4.8
Simplified3.5
Final simplification1.4
herbie shell --seed 2019179
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
:herbie-target
(if (< y -8.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1.0 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))