\frac{\left(x \cdot y\right) \cdot z}{\sqrt{z \cdot z - t \cdot a}}\begin{array}{l}
\mathbf{if}\;z \le -7.751960138449552 \cdot 10^{+153}:\\
\;\;\;\;y \cdot \left(-x\right)\\
\mathbf{elif}\;z \le 1.0718201324596577 \cdot 10^{+102}:\\
\;\;\;\;\frac{y}{\frac{\sqrt{z \cdot z - t \cdot a}}{z}} \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{\frac{\mathsf{fma}\left(\frac{a}{z} \cdot t, \frac{-1}{2}, z\right)}{z}} \cdot x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r12707691 = x;
double r12707692 = y;
double r12707693 = r12707691 * r12707692;
double r12707694 = z;
double r12707695 = r12707693 * r12707694;
double r12707696 = r12707694 * r12707694;
double r12707697 = t;
double r12707698 = a;
double r12707699 = r12707697 * r12707698;
double r12707700 = r12707696 - r12707699;
double r12707701 = sqrt(r12707700);
double r12707702 = r12707695 / r12707701;
return r12707702;
}
double f(double x, double y, double z, double t, double a) {
double r12707703 = z;
double r12707704 = -7.751960138449552e+153;
bool r12707705 = r12707703 <= r12707704;
double r12707706 = y;
double r12707707 = x;
double r12707708 = -r12707707;
double r12707709 = r12707706 * r12707708;
double r12707710 = 1.0718201324596577e+102;
bool r12707711 = r12707703 <= r12707710;
double r12707712 = r12707703 * r12707703;
double r12707713 = t;
double r12707714 = a;
double r12707715 = r12707713 * r12707714;
double r12707716 = r12707712 - r12707715;
double r12707717 = sqrt(r12707716);
double r12707718 = r12707717 / r12707703;
double r12707719 = r12707706 / r12707718;
double r12707720 = r12707719 * r12707707;
double r12707721 = r12707714 / r12707703;
double r12707722 = r12707721 * r12707713;
double r12707723 = -0.5;
double r12707724 = fma(r12707722, r12707723, r12707703);
double r12707725 = r12707724 / r12707703;
double r12707726 = r12707706 / r12707725;
double r12707727 = r12707726 * r12707707;
double r12707728 = r12707711 ? r12707720 : r12707727;
double r12707729 = r12707705 ? r12707709 : r12707728;
return r12707729;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.8 |
|---|---|
| Target | 7.9 |
| Herbie | 6.5 |
if z < -7.751960138449552e+153Initial program 53.7
rmApplied associate-/l*53.2
rmApplied *-un-lft-identity53.2
Applied *-un-lft-identity53.2
Applied sqrt-prod53.2
Applied times-frac53.2
Applied times-frac53.2
Simplified53.2
Taylor expanded around -inf 1.2
Simplified1.2
if -7.751960138449552e+153 < z < 1.0718201324596577e+102Initial program 11.4
rmApplied associate-/l*9.6
rmApplied *-un-lft-identity9.6
Applied *-un-lft-identity9.6
Applied sqrt-prod9.6
Applied times-frac9.6
Applied times-frac9.0
Simplified9.0
if 1.0718201324596577e+102 < z Initial program 44.2
rmApplied associate-/l*41.6
rmApplied *-un-lft-identity41.6
Applied *-un-lft-identity41.6
Applied sqrt-prod41.6
Applied times-frac41.6
Applied times-frac41.6
Simplified41.6
Taylor expanded around inf 5.8
Simplified2.6
Final simplification6.5
herbie shell --seed 2019165 +o rules:numerics
(FPCore (x y z t a)
:name "Statistics.Math.RootFinding:ridders from math-functions-0.1.5.2"
:herbie-target
(if (< z -3.1921305903852764e+46) (- (* y x)) (if (< z 5.976268120920894e+90) (/ (* x z) (/ (sqrt (- (* z z) (* a t))) y)) (* y x)))
(/ (* (* x y) z) (sqrt (- (* z z) (* t a)))))