x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;y \le -250454101183023.0625 \lor \neg \left(y \le 1.180553323745699933141041157702311268804 \cdot 10^{-75}\right):\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\left(z - t\right) \cdot y}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r583107 = x;
double r583108 = y;
double r583109 = z;
double r583110 = t;
double r583111 = r583109 - r583110;
double r583112 = a;
double r583113 = r583112 - r583110;
double r583114 = r583111 / r583113;
double r583115 = r583108 * r583114;
double r583116 = r583107 + r583115;
return r583116;
}
double f(double x, double y, double z, double t, double a) {
double r583117 = y;
double r583118 = -250454101183023.06;
bool r583119 = r583117 <= r583118;
double r583120 = 1.1805533237457e-75;
bool r583121 = r583117 <= r583120;
double r583122 = !r583121;
bool r583123 = r583119 || r583122;
double r583124 = x;
double r583125 = z;
double r583126 = t;
double r583127 = r583125 - r583126;
double r583128 = a;
double r583129 = r583128 - r583126;
double r583130 = r583127 / r583129;
double r583131 = r583117 * r583130;
double r583132 = r583124 + r583131;
double r583133 = r583127 * r583117;
double r583134 = r583133 / r583129;
double r583135 = r583124 + r583134;
double r583136 = r583123 ? r583132 : r583135;
return r583136;
}




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.5 |
| Herbie | 0.5 |
if y < -250454101183023.06 or 1.1805533237457e-75 < y Initial program 0.6
if -250454101183023.06 < y < 1.1805533237457e-75Initial program 2.0
rmApplied div-inv2.1
rmApplied un-div-inv2.0
Applied associate-*r/0.4
Simplified0.4
Final simplification0.5
herbie shell --seed 2019354
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< y -8.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))