x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\begin{array}{l}
\mathbf{if}\;z \le -3346074214531689086976 \lor \neg \left(z \le \frac{6033680699424451}{33554432}\right):\\
\;\;\;\;x + \left(\frac{1353279196958449}{18014398509481984} \cdot \frac{y}{z} + \frac{4992947066835229}{72057594037927936} \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \left(\frac{\left(z \cdot \frac{4992947066835229}{72057594037927936} + \frac{4429125951667411}{9007199254740992}\right) \cdot z + \frac{5029535718965825}{18014398509481984}}{\left(\left({z}^{3} + {\left(\frac{1692356830115869}{281474976710656}\right)}^{3}\right) \cdot z\right) \cdot 2251799813685248 + \left(z \cdot z + \left(\frac{1692356830115869}{281474976710656} \cdot \frac{1692356830115869}{281474976710656} - z \cdot \frac{1692356830115869}{281474976710656}\right)\right) \cdot 7544303578448747} \cdot \left(\left(z \cdot z + \left(\frac{1692356830115869}{281474976710656} \cdot \frac{1692356830115869}{281474976710656} - z \cdot \frac{1692356830115869}{281474976710656}\right)\right) \cdot 2251799813685248\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r469838 = x;
double r469839 = y;
double r469840 = z;
double r469841 = 0.0692910599291889;
double r469842 = r469840 * r469841;
double r469843 = 0.4917317610505968;
double r469844 = r469842 + r469843;
double r469845 = r469844 * r469840;
double r469846 = 0.279195317918525;
double r469847 = r469845 + r469846;
double r469848 = r469839 * r469847;
double r469849 = 6.012459259764103;
double r469850 = r469840 + r469849;
double r469851 = r469850 * r469840;
double r469852 = 3.350343815022304;
double r469853 = r469851 + r469852;
double r469854 = r469848 / r469853;
double r469855 = r469838 + r469854;
return r469855;
}
double f(double x, double y, double z) {
double r469856 = z;
double r469857 = -3.346074214531689e+21;
bool r469858 = r469856 <= r469857;
double r469859 = 6033680699424451.0;
double r469860 = 33554432.0;
double r469861 = r469859 / r469860;
bool r469862 = r469856 <= r469861;
double r469863 = !r469862;
bool r469864 = r469858 || r469863;
double r469865 = x;
double r469866 = 1353279196958449.0;
double r469867 = 18014398509481984.0;
double r469868 = r469866 / r469867;
double r469869 = y;
double r469870 = r469869 / r469856;
double r469871 = r469868 * r469870;
double r469872 = 4992947066835229.0;
double r469873 = 7.205759403792794e+16;
double r469874 = r469872 / r469873;
double r469875 = r469874 * r469869;
double r469876 = r469871 + r469875;
double r469877 = r469865 + r469876;
double r469878 = r469856 * r469874;
double r469879 = 4429125951667411.0;
double r469880 = 9007199254740992.0;
double r469881 = r469879 / r469880;
double r469882 = r469878 + r469881;
double r469883 = r469882 * r469856;
double r469884 = 5029535718965825.0;
double r469885 = r469884 / r469867;
double r469886 = r469883 + r469885;
double r469887 = 3.0;
double r469888 = pow(r469856, r469887);
double r469889 = 1692356830115869.0;
double r469890 = 281474976710656.0;
double r469891 = r469889 / r469890;
double r469892 = pow(r469891, r469887);
double r469893 = r469888 + r469892;
double r469894 = r469893 * r469856;
double r469895 = 2251799813685248.0;
double r469896 = r469894 * r469895;
double r469897 = r469856 * r469856;
double r469898 = r469891 * r469891;
double r469899 = r469856 * r469891;
double r469900 = r469898 - r469899;
double r469901 = r469897 + r469900;
double r469902 = 7544303578448747.0;
double r469903 = r469901 * r469902;
double r469904 = r469896 + r469903;
double r469905 = r469886 / r469904;
double r469906 = r469901 * r469895;
double r469907 = r469905 * r469906;
double r469908 = r469869 * r469907;
double r469909 = r469865 + r469908;
double r469910 = r469864 ? r469877 : r469909;
return r469910;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.3 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if z < -3.346074214531689e+21 or 179817697.38866243 < z Initial program 42.1
Simplified42.1
Taylor expanded around inf 0.0
Simplified0.0
if -3.346074214531689e+21 < z < 179817697.38866243Initial program 0.2
Simplified0.2
rmApplied *-un-lft-identity0.2
Applied times-frac0.1
Simplified0.1
rmApplied flip3-+0.1
Applied associate-*l/0.1
Applied frac-add0.1
Applied associate-/r/0.1
Final simplification0.1
herbie shell --seed 2019303
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.6524566747) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (/ 1 (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394))))