x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -1.5425104884202794 \cdot 10^{-156}:\\
\;\;\;\;x + \frac{y}{\frac{a - t}{z - t}}\\
\mathbf{elif}\;t \le 3.35743028334156564 \cdot 10^{-19}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r567550 = x;
double r567551 = y;
double r567552 = z;
double r567553 = t;
double r567554 = r567552 - r567553;
double r567555 = a;
double r567556 = r567555 - r567553;
double r567557 = r567554 / r567556;
double r567558 = r567551 * r567557;
double r567559 = r567550 + r567558;
return r567559;
}
double f(double x, double y, double z, double t, double a) {
double r567560 = t;
double r567561 = -1.5425104884202794e-156;
bool r567562 = r567560 <= r567561;
double r567563 = x;
double r567564 = y;
double r567565 = a;
double r567566 = r567565 - r567560;
double r567567 = z;
double r567568 = r567567 - r567560;
double r567569 = r567566 / r567568;
double r567570 = r567564 / r567569;
double r567571 = r567563 + r567570;
double r567572 = 3.3574302833415656e-19;
bool r567573 = r567560 <= r567572;
double r567574 = r567564 * r567568;
double r567575 = r567574 / r567566;
double r567576 = r567563 + r567575;
double r567577 = r567568 / r567566;
double r567578 = r567564 * r567577;
double r567579 = r567563 + r567578;
double r567580 = r567573 ? r567576 : r567579;
double r567581 = r567562 ? r567571 : r567580;
return r567581;
}




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.5 |
| Herbie | 1.4 |
if t < -1.5425104884202794e-156Initial program 0.7
rmApplied associate-*r/13.4
rmApplied associate-/l*0.6
if -1.5425104884202794e-156 < t < 3.3574302833415656e-19Initial program 3.5
rmApplied associate-*r/3.5
if 3.3574302833415656e-19 < t Initial program 0.1
Final simplification1.4
herbie shell --seed 2020081
(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)))))