x + \frac{y \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;y \le -1.4067031403702933 \cdot 10^{-150}:\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\
\mathbf{elif}\;y \le 4.050712264929229 \cdot 10^{+58}:\\
\;\;\;\;\frac{\left(z - t\right) \cdot y}{a - t} + x\\
\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 r25527789 = x;
double r25527790 = y;
double r25527791 = z;
double r25527792 = t;
double r25527793 = r25527791 - r25527792;
double r25527794 = r25527790 * r25527793;
double r25527795 = a;
double r25527796 = r25527795 - r25527792;
double r25527797 = r25527794 / r25527796;
double r25527798 = r25527789 + r25527797;
return r25527798;
}
double f(double x, double y, double z, double t, double a) {
double r25527799 = y;
double r25527800 = -1.4067031403702933e-150;
bool r25527801 = r25527799 <= r25527800;
double r25527802 = x;
double r25527803 = z;
double r25527804 = t;
double r25527805 = r25527803 - r25527804;
double r25527806 = a;
double r25527807 = r25527806 - r25527804;
double r25527808 = r25527805 / r25527807;
double r25527809 = r25527799 * r25527808;
double r25527810 = r25527802 + r25527809;
double r25527811 = 4.050712264929229e+58;
bool r25527812 = r25527799 <= r25527811;
double r25527813 = r25527805 * r25527799;
double r25527814 = r25527813 / r25527807;
double r25527815 = r25527814 + r25527802;
double r25527816 = r25527812 ? r25527815 : r25527810;
double r25527817 = r25527801 ? r25527810 : r25527816;
return r25527817;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.0 |
|---|---|
| Target | 1.2 |
| Herbie | 0.8 |
if y < -1.4067031403702933e-150 or 4.050712264929229e+58 < y Initial program 17.6
Simplified3.1
rmApplied clear-num3.2
rmApplied fma-udef3.2
Simplified0.7
if -1.4067031403702933e-150 < y < 4.050712264929229e+58Initial program 0.9
Final simplification0.8
herbie shell --seed 2019164 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, B"
:herbie-target
(+ x (/ y (/ (- a t) (- z t))))
(+ x (/ (* y (- z t)) (- a t))))