\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\begin{array}{l}
\mathbf{if}\;x \le 33927.194853528519161045551300048828125:\\
\;\;\;\;\frac{z \cdot \left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) + 0.08333333333333299564049667651488562114537}{x} + \left(0.9189385332046700050057097541866824030876 + \left(\sqrt[3]{\left(\left(\left(x - 0.5\right) \cdot \log x\right) \cdot \left(\left(x - 0.5\right) \cdot \log x\right)\right) \cdot \left(\left(x - 0.5\right) \cdot \log x\right)} - x\right)\right)\\
\mathbf{elif}\;x \le 3.969255511687771800217701409925025577478 \cdot 10^{177}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \left(\frac{z \cdot z}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - \frac{z}{x} \cdot 0.002777777777777800001512975569539776188321\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{z \cdot \left(0.4000000000000064059868520871532382443547 \cdot x - x \cdot \left(z \cdot 0.1009522780952416126654114236771420110017\right)\right) + x \cdot 12.00000000000004796163466380676254630089} + \left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) + \left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) - x\right) + 0.9189385332046700050057097541866824030876\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r24333951 = x;
double r24333952 = 0.5;
double r24333953 = r24333951 - r24333952;
double r24333954 = log(r24333951);
double r24333955 = r24333953 * r24333954;
double r24333956 = r24333955 - r24333951;
double r24333957 = 0.91893853320467;
double r24333958 = r24333956 + r24333957;
double r24333959 = y;
double r24333960 = 0.0007936500793651;
double r24333961 = r24333959 + r24333960;
double r24333962 = z;
double r24333963 = r24333961 * r24333962;
double r24333964 = 0.0027777777777778;
double r24333965 = r24333963 - r24333964;
double r24333966 = r24333965 * r24333962;
double r24333967 = 0.083333333333333;
double r24333968 = r24333966 + r24333967;
double r24333969 = r24333968 / r24333951;
double r24333970 = r24333958 + r24333969;
return r24333970;
}
double f(double x, double y, double z) {
double r24333971 = x;
double r24333972 = 33927.19485352852;
bool r24333973 = r24333971 <= r24333972;
double r24333974 = z;
double r24333975 = y;
double r24333976 = 0.0007936500793651;
double r24333977 = r24333975 + r24333976;
double r24333978 = r24333977 * r24333974;
double r24333979 = 0.0027777777777778;
double r24333980 = r24333978 - r24333979;
double r24333981 = r24333974 * r24333980;
double r24333982 = 0.083333333333333;
double r24333983 = r24333981 + r24333982;
double r24333984 = r24333983 / r24333971;
double r24333985 = 0.91893853320467;
double r24333986 = 0.5;
double r24333987 = r24333971 - r24333986;
double r24333988 = log(r24333971);
double r24333989 = r24333987 * r24333988;
double r24333990 = r24333989 * r24333989;
double r24333991 = r24333990 * r24333989;
double r24333992 = cbrt(r24333991);
double r24333993 = r24333992 - r24333971;
double r24333994 = r24333985 + r24333993;
double r24333995 = r24333984 + r24333994;
double r24333996 = 3.969255511687772e+177;
bool r24333997 = r24333971 <= r24333996;
double r24333998 = r24333989 - r24333971;
double r24333999 = r24333998 + r24333985;
double r24334000 = r24333974 * r24333974;
double r24334001 = r24334000 / r24333971;
double r24334002 = r24334001 * r24333977;
double r24334003 = r24333974 / r24333971;
double r24334004 = r24334003 * r24333979;
double r24334005 = r24334002 - r24334004;
double r24334006 = r24333999 + r24334005;
double r24334007 = 1.0;
double r24334008 = 0.4000000000000064;
double r24334009 = r24334008 * r24333971;
double r24334010 = 0.10095227809524161;
double r24334011 = r24333974 * r24334010;
double r24334012 = r24333971 * r24334011;
double r24334013 = r24334009 - r24334012;
double r24334014 = r24333974 * r24334013;
double r24334015 = 12.000000000000048;
double r24334016 = r24333971 * r24334015;
double r24334017 = r24334014 + r24334016;
double r24334018 = r24334007 / r24334017;
double r24334019 = cbrt(r24333971);
double r24334020 = r24334019 * r24334019;
double r24334021 = log(r24334020);
double r24334022 = r24333987 * r24334021;
double r24334023 = log(r24334019);
double r24334024 = r24333987 * r24334023;
double r24334025 = r24334024 - r24333971;
double r24334026 = r24334025 + r24333985;
double r24334027 = r24334022 + r24334026;
double r24334028 = r24334018 + r24334027;
double r24334029 = r24333997 ? r24334006 : r24334028;
double r24334030 = r24333973 ? r24333995 : r24334029;
return r24334030;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.2 |
| Herbie | 2.6 |
if x < 33927.19485352852Initial program 0.1
rmApplied add-cbrt-cube0.1
Applied add-cbrt-cube0.1
Applied cbrt-unprod0.1
Simplified0.1
if 33927.19485352852 < x < 3.969255511687772e+177Initial program 6.7
Taylor expanded around inf 6.7
Simplified4.2
if 3.969255511687772e+177 < x Initial program 14.0
rmApplied add-cube-cbrt14.0
Applied log-prod14.0
Applied distribute-rgt-in14.0
Applied associate--l+14.0
Applied associate-+l+14.0
rmApplied clear-num14.0
Taylor expanded around 0 12.3
Simplified4.4
Final simplification2.6
herbie shell --seed 2019171
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
:herbie-target
(+ (+ (+ (* (- x 0.5) (log x)) (- 0.91893853320467 x)) (/ 0.083333333333333 x)) (* (/ z x) (- (* z (+ y 0.0007936500793651)) 0.0027777777777778)))
(+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467) (/ (+ (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) 0.083333333333333) x)))