GMP는 The GNU Multiple Precision Arithmetic Library(고정밀도 연산을 위한 GNU 라이브러리)의 줄임글로서 GNU MP라고도 한다. 리눅스 호환 환경이면 대부분 GMP는 이미 설치되어 있을 것이다. GMP의 공식 홈페이지는 http://gmplib.org 이고, GMP는 LGPL 하에서 배포된다.
또 gcc는 리눅스 호환 환경에서 쓸 수 있는 C 컴파일러(GNU C 컴파일러)이다. 대부분의 리눅스 호환 환경에는 gcc가 설치되어 있을 것이다.
다음 소스 코드는 GMP의 설치 테스트를 하기 위한 간단한 예제이다.
C 언어에서 GMP 라이브러리를 사용하기 위해서는 헤더 파일 gmp.h를 인클루드한다.
컴파일할 때는 반드시 컴파일 옵션 -lgmp 를 주어야 한다.
또 컴파일 옵션 -o testGMP 을 준 것은 생성될 실행파일명을 testGMP로 하라는 의미이다.
이 옵션을 생략하면 생성되는 실행파일명이 a.out(단, cygwin의 경우에는 a.exe)이다.
(( 참고로, Visual C++ 6 에서 컴파일하는 명령은
cl -I. testGMP.c /link gmp.lib /NODEFAULTLIB:LIBCMT
이다. 필자는 Visual C++ 6 에서 GMP 라이브러리를 사용하기 위해 영국에 사는 Brian Gladman 씨가 http://www.gladman.me.uk/computing/ 에서 제공하는 gmp-4.1.4.diffs.zip 을 써서 Visual C++ 6 용 GMP 라이브러리 gmp.lib 를 빌드하였다. ))
mpz_mul_ui 함수는 mpz_t 타입의 정수에 unsigned long 타입의 정수를 곱하는 함수이고,
mpz_add_ui 함수는 mpz_t 타입의 정수에 unsigned long 타입의 정수를 합하는 함수이다.
또 mpz_init_set_str 함수는 두번째 인수에 주어진 ASCIZ 문자열을 세 번째 인수에 주어진 적당한 진법(이 예에서는 10)을 적용하여 첫번째 인수에 주어진 mpz_t 타입의 정수 변수(이 예에서는 n)에 저장하는 함수이다.
또 gcc는 리눅스 호환 환경에서 쓸 수 있는 C 컴파일러(GNU C 컴파일러)이다. 대부분의 리눅스 호환 환경에는 gcc가 설치되어 있을 것이다.
다음 소스 코드는 GMP의 설치 테스트를 하기 위한 간단한 예제이다.
C 언어에서 GMP 라이브러리를 사용하기 위해서는 헤더 파일 gmp.h를 인클루드한다.
컴파일할 때는 반드시 컴파일 옵션 -lgmp 를 주어야 한다.
또 컴파일 옵션 -o testGMP 을 준 것은 생성될 실행파일명을 testGMP로 하라는 의미이다.
이 옵션을 생략하면 생성되는 실행파일명이 a.out(단, cygwin의 경우에는 a.exe)이다.
(( 참고로, Visual C++ 6 에서 컴파일하는 명령은
cl -I. testGMP.c /link gmp.lib /NODEFAULTLIB:LIBCMT
이다. 필자는 Visual C++ 6 에서 GMP 라이브러리를 사용하기 위해 영국에 사는 Brian Gladman 씨가 http://www.gladman.me.uk/computing/ 에서 제공하는 gmp-4.1.4.diffs.zip 을 써서 Visual C++ 6 용 GMP 라이브러리 gmp.lib 를 빌드하였다. ))
mpz_mul_ui 함수는 mpz_t 타입의 정수에 unsigned long 타입의 정수를 곱하는 함수이고,
mpz_add_ui 함수는 mpz_t 타입의 정수에 unsigned long 타입의 정수를 합하는 함수이다.
mpz_init(r);
mpz_init 함수는 mpz_t 타입의 정수 변수를 초기화 하는 함수이다. (초기화된 값은 0)
또 mpz_init_set_str 함수는 두번째 인수에 주어진 ASCIZ 문자열을 세 번째 인수에 주어진 적당한 진법(이 예에서는 10)을 적용하여 첫번째 인수에 주어진 mpz_t 타입의 정수 변수(이 예에서는 n)에 저장하는 함수이다.
- /*
- * Filename: testGMP.c
- *
- * Compile: gcc -o testGMP testGMP.c -lgmp
- *
- * Execute: ./testGMP
- * Output: 2470450
- */
- #include <gmp.h>
- void foo(mpz_t result, const mpz_t param, unsigned long n) {
- unsigned long i;
- mpz_mul_ui(result, param, n);
- for (i = 1; i < n; i++) {
- mpz_add_ui (result, result, i*7);
- }
- }
- int main(void) {
- mpz_t r, n;
- mpz_init(r);
- mpz_init_set_str(n, "123456", 10);
- foo(r, n, 20L);
- gmp_printf("%Zd\n", r);
- return 0;
- }
컴파일> gcc -o testGMP testGMP.c -lgmp
실행> ./testGMP
2470450
Win32의 Visual C++ 6 상에서 컴파일하기:
컴파일>cl -I. testGMP.c /link gmp.lib /NODEFAULTLIB:LIBCMT
실행> testGMP
2470450
Visual C++ 9.0 (Visual Studio 2008) 에서 컴파일하기:
컴파일>cl testGMP.c gmp.lib
실행> testGMP
2470450
'프로그래밍 > C' 카테고리의 다른 글
황금비율(golden ratio) 구하기 with C or Ch (0) | 2008.03.24 |
---|---|
현재 시각 알아내기 for C and Ch (0) | 2008.03.24 |
조립제법(Horner의 방법) 예제 for C and Ch (0) | 2008.03.14 |
80컬럼 컨솔에 19단표 출력하기 예제 for C and Ch (0) | 2008.03.03 |
(최대공약수 구하기) while... 반복문 예제 for C (0) | 2008.02.21 |