#include #include #include /* Compute the Euler_Mascheroni constant through the formula: * * γ = lim_{M → +inf} sum_{k = 1}^{M} bin{M, k} (-1)^k / k * ln(Γ(k+1)) * * Best result is obtained for M = 41. * Values from 1 to 100 were checked. * */ double exact = 0.577215664901532860; int main() { double best = 0, num = 0; double sum = 0, prev; for (double M = 1; M < 60; M++) { prev = sum; sum = 0; for (double k = 1; k <= M; k++) { sum += (tgamma(M + 1))/(tgamma(k + 1)*tgamma(M - k + 1)) * pow(-1, k)/k * log(tgamma (k + 1)); } printf("M: \t%d\t", (int)M); printf("diff:\t%.15f\n", fabs(sum - exact)); if ((fabs(sum - exact) < fabs(prev - exact)) && (fabs(sum - exact) < fabs(best - exact))){ best = sum; num = M; } } printf("M: %d\n", (int)num); printf("approx:\t%.15f\n", best); printf("true:\t%.15f\n", exact); printf("diff:\t%.15f\n", fabs(best - exact)); printf("\t 123456789_12345\n"); return EXIT_SUCCESS; }