x + y \cdot \frac{z - t}{z - a}\begin{array}{l}
\mathbf{if}\;y \le -3.25947276335486826 \cdot 10^{87} \lor \neg \left(y \le 1.45139441661919718 \cdot 10^{-7}\right):\\
\;\;\;\;x + y \cdot \frac{-\left(z - t\right)}{-\left(z - a\right)}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(-\left(z - t\right)\right)}{-\left(z - a\right)}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r418134 = x;
double r418135 = y;
double r418136 = z;
double r418137 = t;
double r418138 = r418136 - r418137;
double r418139 = a;
double r418140 = r418136 - r418139;
double r418141 = r418138 / r418140;
double r418142 = r418135 * r418141;
double r418143 = r418134 + r418142;
return r418143;
}
double f(double x, double y, double z, double t, double a) {
double r418144 = y;
double r418145 = -3.2594727633548683e+87;
bool r418146 = r418144 <= r418145;
double r418147 = 1.4513944166191972e-07;
bool r418148 = r418144 <= r418147;
double r418149 = !r418148;
bool r418150 = r418146 || r418149;
double r418151 = x;
double r418152 = z;
double r418153 = t;
double r418154 = r418152 - r418153;
double r418155 = -r418154;
double r418156 = a;
double r418157 = r418152 - r418156;
double r418158 = -r418157;
double r418159 = r418155 / r418158;
double r418160 = r418144 * r418159;
double r418161 = r418151 + r418160;
double r418162 = r418144 * r418155;
double r418163 = r418162 / r418158;
double r418164 = r418151 + r418163;
double r418165 = r418150 ? r418161 : r418164;
return r418165;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.4 |
|---|---|
| Target | 1.2 |
| Herbie | 0.9 |
if y < -3.2594727633548683e+87 or 1.4513944166191972e-07 < y Initial program 0.6
rmApplied frac-2neg0.6
if -3.2594727633548683e+87 < y < 1.4513944166191972e-07Initial program 2.0
rmApplied frac-2neg2.0
rmApplied associate-*r/1.1
Final simplification0.9
herbie shell --seed 2019198 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, A"
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (* y (/ (- z t) (- z a)))))