x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;y \le -2.278223167257424843811284870496496436881 \cdot 10^{-23}:\\
\;\;\;\;\frac{z - t}{a - t} \cdot y + x\\
\mathbf{elif}\;y \le 4.106049947800754326326111224585926281167 \cdot 10^{-80}:\\
\;\;\;\;x + \left(y \cdot \left(z - t\right)\right) \cdot \frac{1}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\frac{z - t}{a - t} \cdot y + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r27541363 = x;
double r27541364 = y;
double r27541365 = z;
double r27541366 = t;
double r27541367 = r27541365 - r27541366;
double r27541368 = a;
double r27541369 = r27541368 - r27541366;
double r27541370 = r27541367 / r27541369;
double r27541371 = r27541364 * r27541370;
double r27541372 = r27541363 + r27541371;
return r27541372;
}
double f(double x, double y, double z, double t, double a) {
double r27541373 = y;
double r27541374 = -2.2782231672574248e-23;
bool r27541375 = r27541373 <= r27541374;
double r27541376 = z;
double r27541377 = t;
double r27541378 = r27541376 - r27541377;
double r27541379 = a;
double r27541380 = r27541379 - r27541377;
double r27541381 = r27541378 / r27541380;
double r27541382 = r27541381 * r27541373;
double r27541383 = x;
double r27541384 = r27541382 + r27541383;
double r27541385 = 4.106049947800754e-80;
bool r27541386 = r27541373 <= r27541385;
double r27541387 = r27541373 * r27541378;
double r27541388 = 1.0;
double r27541389 = r27541388 / r27541380;
double r27541390 = r27541387 * r27541389;
double r27541391 = r27541383 + r27541390;
double r27541392 = r27541386 ? r27541391 : r27541384;
double r27541393 = r27541375 ? r27541384 : r27541392;
return r27541393;
}




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 | 0.4 |
if y < -2.2782231672574248e-23 or 4.106049947800754e-80 < y Initial program 0.4
if -2.2782231672574248e-23 < y < 4.106049947800754e-80Initial program 2.5
rmApplied div-inv2.5
Applied associate-*r*0.5
Final simplification0.4
herbie shell --seed 2019192
(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)))))