x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\begin{array}{l}
\mathbf{if}\;z \le -982813980482942554198071844188130490974200:\\
\;\;\;\;\mathsf{fma}\left(y, 3.130605476229999961645944495103321969509 + \frac{\frac{t}{z}}{z}, x\right)\\
\mathbf{elif}\;z \le 79.53191583974852107985498150810599327087:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{\frac{1}{\sqrt{\sqrt{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, 15.2346874069999991263557603815570473671 + z, 31.46901157490000144889563671313226222992\right), 11.94009057210000079862766142468899488449\right), 0.6077713877710000378584709324059076607227\right)}}} \cdot \frac{\mathsf{fma}\left(\mathsf{fma}\left(z, \mathsf{fma}\left(\mathsf{fma}\left(3.130605476229999961645944495103321969509, z, 11.16675412620000074070958362426608800888\right), z, t\right), a\right), z, b\right)}{\sqrt{\sqrt{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, 15.2346874069999991263557603815570473671 + z, 31.46901157490000144889563671313226222992\right), 11.94009057210000079862766142468899488449\right), 0.6077713877710000378584709324059076607227\right)}}}}{\sqrt{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, 15.2346874069999991263557603815570473671 + z, 31.46901157490000144889563671313226222992\right), 11.94009057210000079862766142468899488449\right), 0.6077713877710000378584709324059076607227\right)}}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, 3.130605476229999961645944495103321969509 + \frac{\frac{t}{z}}{z}, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r18028852 = x;
double r18028853 = y;
double r18028854 = z;
double r18028855 = 3.13060547623;
double r18028856 = r18028854 * r18028855;
double r18028857 = 11.1667541262;
double r18028858 = r18028856 + r18028857;
double r18028859 = r18028858 * r18028854;
double r18028860 = t;
double r18028861 = r18028859 + r18028860;
double r18028862 = r18028861 * r18028854;
double r18028863 = a;
double r18028864 = r18028862 + r18028863;
double r18028865 = r18028864 * r18028854;
double r18028866 = b;
double r18028867 = r18028865 + r18028866;
double r18028868 = r18028853 * r18028867;
double r18028869 = 15.234687407;
double r18028870 = r18028854 + r18028869;
double r18028871 = r18028870 * r18028854;
double r18028872 = 31.4690115749;
double r18028873 = r18028871 + r18028872;
double r18028874 = r18028873 * r18028854;
double r18028875 = 11.9400905721;
double r18028876 = r18028874 + r18028875;
double r18028877 = r18028876 * r18028854;
double r18028878 = 0.607771387771;
double r18028879 = r18028877 + r18028878;
double r18028880 = r18028868 / r18028879;
double r18028881 = r18028852 + r18028880;
return r18028881;
}
double f(double x, double y, double z, double t, double a, double b) {
double r18028882 = z;
double r18028883 = -9.828139804829426e+41;
bool r18028884 = r18028882 <= r18028883;
double r18028885 = y;
double r18028886 = 3.13060547623;
double r18028887 = t;
double r18028888 = r18028887 / r18028882;
double r18028889 = r18028888 / r18028882;
double r18028890 = r18028886 + r18028889;
double r18028891 = x;
double r18028892 = fma(r18028885, r18028890, r18028891);
double r18028893 = 79.53191583974852;
bool r18028894 = r18028882 <= r18028893;
double r18028895 = 1.0;
double r18028896 = 15.234687407;
double r18028897 = r18028896 + r18028882;
double r18028898 = 31.4690115749;
double r18028899 = fma(r18028882, r18028897, r18028898);
double r18028900 = 11.9400905721;
double r18028901 = fma(r18028882, r18028899, r18028900);
double r18028902 = 0.607771387771;
double r18028903 = fma(r18028882, r18028901, r18028902);
double r18028904 = sqrt(r18028903);
double r18028905 = sqrt(r18028904);
double r18028906 = r18028895 / r18028905;
double r18028907 = 11.1667541262;
double r18028908 = fma(r18028886, r18028882, r18028907);
double r18028909 = fma(r18028908, r18028882, r18028887);
double r18028910 = a;
double r18028911 = fma(r18028882, r18028909, r18028910);
double r18028912 = b;
double r18028913 = fma(r18028911, r18028882, r18028912);
double r18028914 = r18028913 / r18028905;
double r18028915 = r18028906 * r18028914;
double r18028916 = r18028915 / r18028904;
double r18028917 = fma(r18028885, r18028916, r18028891);
double r18028918 = r18028894 ? r18028917 : r18028892;
double r18028919 = r18028884 ? r18028892 : r18028918;
return r18028919;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 29.5 |
|---|---|
| Target | 1.1 |
| Herbie | 1.7 |
if z < -9.828139804829426e+41 or 79.53191583974852 < z Initial program 57.7
Simplified55.0
Taylor expanded around inf 9.4
Simplified2.4
if -9.828139804829426e+41 < z < 79.53191583974852Initial program 1.1
Simplified0.6
rmApplied add-sqr-sqrt1.1
Applied associate-/r*0.9
rmApplied add-sqr-sqrt0.9
Applied sqrt-prod0.9
Applied *-un-lft-identity0.9
Applied times-frac0.9
Final simplification1.7
herbie shell --seed 2019170 +o rules:numerics
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
:herbie-target
(if (< z -6.499344996252632e+53) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1.0))) (if (< z 7.066965436914287e+59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771) (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1.0)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771))))