x + \frac{y \cdot \left(\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977\right)}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\begin{array}{l}
\mathbf{if}\;z \le -27275370622.134834 \lor \neg \left(z \le 152074617.198554\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{0.07512208616047561}{z}, y, \mathsf{fma}\left(y, 0.0692910599291888946, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\sqrt[3]{\mathsf{fma}\left(z + 6.0124592597641033, z, 3.35034381502230394\right)} \cdot \sqrt[3]{\mathsf{fma}\left(z + 6.0124592597641033, z, 3.35034381502230394\right)}} \cdot \frac{y}{\sqrt[3]{\mathsf{fma}\left(z + 6.0124592597641033, z, 3.35034381502230394\right)}}, \mathsf{fma}\left(\mathsf{fma}\left(z, 0.0692910599291888946, 0.49173176105059679\right), z, 0.279195317918524977\right), x\right)\\
\end{array}double f(double x, double y, double z) {
double r341904 = x;
double r341905 = y;
double r341906 = z;
double r341907 = 0.0692910599291889;
double r341908 = r341906 * r341907;
double r341909 = 0.4917317610505968;
double r341910 = r341908 + r341909;
double r341911 = r341910 * r341906;
double r341912 = 0.279195317918525;
double r341913 = r341911 + r341912;
double r341914 = r341905 * r341913;
double r341915 = 6.012459259764103;
double r341916 = r341906 + r341915;
double r341917 = r341916 * r341906;
double r341918 = 3.350343815022304;
double r341919 = r341917 + r341918;
double r341920 = r341914 / r341919;
double r341921 = r341904 + r341920;
return r341921;
}
double f(double x, double y, double z) {
double r341922 = z;
double r341923 = -27275370622.134834;
bool r341924 = r341922 <= r341923;
double r341925 = 152074617.19855404;
bool r341926 = r341922 <= r341925;
double r341927 = !r341926;
bool r341928 = r341924 || r341927;
double r341929 = 0.07512208616047561;
double r341930 = r341929 / r341922;
double r341931 = y;
double r341932 = 0.0692910599291889;
double r341933 = x;
double r341934 = fma(r341931, r341932, r341933);
double r341935 = fma(r341930, r341931, r341934);
double r341936 = 1.0;
double r341937 = 6.012459259764103;
double r341938 = r341922 + r341937;
double r341939 = 3.350343815022304;
double r341940 = fma(r341938, r341922, r341939);
double r341941 = cbrt(r341940);
double r341942 = r341941 * r341941;
double r341943 = r341936 / r341942;
double r341944 = r341931 / r341941;
double r341945 = r341943 * r341944;
double r341946 = 0.4917317610505968;
double r341947 = fma(r341922, r341932, r341946);
double r341948 = 0.279195317918525;
double r341949 = fma(r341947, r341922, r341948);
double r341950 = fma(r341945, r341949, r341933);
double r341951 = r341928 ? r341935 : r341950;
return r341951;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 19.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if z < -27275370622.134834 or 152074617.19855404 < z Initial program 40.4
Simplified33.5
Taylor expanded around inf 0.0
Simplified0.0
if -27275370622.134834 < z < 152074617.19855404Initial program 0.2
Simplified0.1
rmApplied add-cube-cbrt0.4
Applied *-un-lft-identity0.4
Applied times-frac0.2
Final simplification0.1
herbie shell --seed 2020065 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))