x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;z \le 3.848163459394331689137313253237119172793 \cdot 10^{185}:\\
\;\;\;\;x + 1 \cdot \frac{y}{\frac{a - t}{z - t}}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{a - t} \cdot \frac{\sqrt{1}}{\frac{1}{z - t}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r568933 = x;
double r568934 = y;
double r568935 = z;
double r568936 = t;
double r568937 = r568935 - r568936;
double r568938 = a;
double r568939 = r568938 - r568936;
double r568940 = r568937 / r568939;
double r568941 = r568934 * r568940;
double r568942 = r568933 + r568941;
return r568942;
}
double f(double x, double y, double z, double t, double a) {
double r568943 = z;
double r568944 = 3.8481634593943317e+185;
bool r568945 = r568943 <= r568944;
double r568946 = x;
double r568947 = 1.0;
double r568948 = y;
double r568949 = a;
double r568950 = t;
double r568951 = r568949 - r568950;
double r568952 = r568943 - r568950;
double r568953 = r568951 / r568952;
double r568954 = r568948 / r568953;
double r568955 = r568947 * r568954;
double r568956 = r568946 + r568955;
double r568957 = r568948 / r568951;
double r568958 = sqrt(r568947);
double r568959 = r568947 / r568952;
double r568960 = r568958 / r568959;
double r568961 = r568957 * r568960;
double r568962 = r568946 + r568961;
double r568963 = r568945 ? r568956 : r568962;
return r568963;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.5 |
|---|---|
| Target | 0.4 |
| Herbie | 1.3 |
if z < 3.8481634593943317e+185Initial program 1.1
rmApplied clear-num1.2
rmApplied *-un-lft-identity1.2
Applied associate-*l*1.2
Simplified1.0
if 3.8481634593943317e+185 < z Initial program 5.1
rmApplied clear-num5.2
rmApplied div-inv5.2
Applied add-sqr-sqrt5.2
Applied times-frac5.2
Applied associate-*r*4.6
Simplified4.6
Final simplification1.3
herbie shell --seed 2019353
(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)))))