x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;y \le -8.8421123940869923 \cdot 10^{-4} \lor \neg \left(y \le 1.5536369793631163 \cdot 10^{-59}\right):\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(z - t\right) \cdot y}{a - t} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r639244 = x;
double r639245 = y;
double r639246 = z;
double r639247 = t;
double r639248 = r639246 - r639247;
double r639249 = a;
double r639250 = r639249 - r639247;
double r639251 = r639248 / r639250;
double r639252 = r639245 * r639251;
double r639253 = r639244 + r639252;
return r639253;
}
double f(double x, double y, double z, double t, double a) {
double r639254 = y;
double r639255 = -0.0008842112394086992;
bool r639256 = r639254 <= r639255;
double r639257 = 1.5536369793631163e-59;
bool r639258 = r639254 <= r639257;
double r639259 = !r639258;
bool r639260 = r639256 || r639259;
double r639261 = x;
double r639262 = z;
double r639263 = t;
double r639264 = r639262 - r639263;
double r639265 = a;
double r639266 = r639265 - r639263;
double r639267 = r639264 / r639266;
double r639268 = r639254 * r639267;
double r639269 = r639261 + r639268;
double r639270 = r639264 * r639254;
double r639271 = r639270 / r639266;
double r639272 = r639271 + r639261;
double r639273 = r639260 ? r639269 : r639272;
return r639273;
}




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 | 0.4 |
| Herbie | 0.4 |
if y < -0.0008842112394086992 or 1.5536369793631163e-59 < y Initial program 0.5
if -0.0008842112394086992 < y < 1.5536369793631163e-59Initial program 2.3
rmApplied *-un-lft-identity2.3
Applied associate-*l*2.3
Simplified3.3
rmApplied associate-*r/0.3
Final simplification0.4
herbie shell --seed 2020043 +o rules:numerics
(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)))))