Visual Studio 2019 와 MSYS2 MinGW64 에서 테스트 된 소스입니다.
혹시 MinGW 에서 컴파일되지 않으면
$ packman -S mpfr
명령으로 mpfr 라이브러리를 설치하고 컴파일하면 된다.
// Filename: calcGammaFn.c
//
// Compile: gcc -o calcGammaFn calcGammaFn.c -lmpfr -lgmp
// Execute: ./calcGammaFn
// Or
// Compile: cl calcGammaFn.c /I. mpfr.lib
// Execute: calcGammaFn
//
// Date: 2021.01.28
#include <stdio.h>
#include <math.h> // for log(10)
#include <mpfr.h>
int main()
{
mpfr_t x;
int i, inex;
mpfr_set_emin (-41);
mpfr_init2 (x, 42);
for (i = 1; i <= 17; i++)
{
mpfr_set_ui (x, i, MPFR_RNDN);
inex = mpfr_gamma (x, x, MPFR_RNDZ);
mpfr_subnormalize (x, inex, MPFR_RNDZ);
mpfr_dump (x);
}
printf("\n");
for (i = 1; i <= 17; i++)
{
mpfr_set_ui (x, i, MPFR_RNDN);
inex = mpfr_gamma (x, x, MPFR_RNDZ);
mpfr_printf("Gamma(%2d) = %2d! = %Rf\n", i, i - 1, x);
}
printf("\n");
for (i = 1; i <= 17; i++)
{
mpfr_set_ui (x, i, MPFR_RNDN);
inex = mpfr_lngamma (x, x, MPFR_RNDZ);
mpfr_printf("LogGamma(%2d) = Log(%2d!) = %Rf\n", i, i - 1, x);
}
printf("\n");
double t10 = log(10.0);
printf("log(10) = %f\n", t10);
printf("\n");
for (i = 1; i <= 17; i++)
{
mpfr_set_ui (x, i, MPFR_RNDN);
inex = mpfr_lngamma (x, x, MPFR_RNDZ);
inex = mpfr_div_d(x, x, t10, MPFR_RNDZ);
mpfr_printf("Log10Gamma(%2d) = Log10(%2d!) = %Rf\n", i, i - 1, x);
}
mpfr_clear (x);
return 0;
}
/*
Output:
LogGamma( 1) = Log( 0!) = 0
LogGamma( 2) = Log( 1!) = 0
LogGamma( 3) = Log( 2!) = 0.693147
LogGamma( 4) = Log( 3!) = 1.791759
LogGamma( 5) = Log( 4!) = 3.178054
LogGamma( 6) = Log( 5!) = 4.787492
LogGamma( 7) = Log( 6!) = 6.579251
LogGamma( 8) = Log( 7!) = 8.525161
LogGamma( 9) = Log( 8!) = 10.604603
LogGamma(10) = Log( 9!) = 12.801827
LogGamma(11) = Log(10!) = 15.104413
LogGamma(12) = Log(11!) = 17.502308
LogGamma(13) = Log(12!) = 19.987214
LogGamma(14) = Log(13!) = 22.552164
LogGamma(15) = Log(14!) = 25.191221
LogGamma(16) = Log(15!) = 27.899271
LogGamma(17) = Log(16!) = 30.671860
log(10) = 2.302585
Log10Gamma( 1) = Log10( 0!) = 0
Log10Gamma( 2) = Log10( 1!) = 0
Log10Gamma( 3) = Log10( 2!) = 0.301030
Log10Gamma( 4) = Log10( 3!) = 0.778151
Log10Gamma( 5) = Log10( 4!) = 1.380211
Log10Gamma( 6) = Log10( 5!) = 2.079181
Log10Gamma( 7) = Log10( 6!) = 2.857332
Log10Gamma( 8) = Log10( 7!) = 3.702431
Log10Gamma( 9) = Log10( 8!) = 4.605521
Log10Gamma(10) = Log10( 9!) = 5.559763
Log10Gamma(11) = Log10(10!) = 6.559763
Log10Gamma(12) = Log10(11!) = 7.601156
Log10Gamma(13) = Log10(12!) = 8.680337
Log10Gamma(14) = Log10(13!) = 9.794280
Log10Gamma(15) = Log10(14!) = 10.940408
Log10Gamma(16) = Log10(15!) = 12.116500
Log10Gamma(17) = Log10(16!) = 13.320620
*/
'프로그래밍 > C' 카테고리의 다른 글
MSYS2 에서 C 언어의 printf(...) 가 제대로 출력하지 못할 때... (0) | 2022.01.08 |
---|---|
Lanczos 계수를 이용하여 Gamma 함수값 구하기 (0) | 2021.12.08 |
cygwin 의 gcc 로 UTF-8 한글 처리하는 간단한 예제 (0) | 2014.04.13 |
cygwin/mingw 의 gcc 로 utf-8 한글 처리하기 (0) | 2014.04.02 |
Visual C++ 2010 과 pdcurses 를 이용한 helloworld 예제 (0) | 2014.01.15 |