2009-10-06 4 views
2

최근에 고정밀 산술을위한 GMP 라이브러리에 대해 소개했습니다. 사용하기에 충분히 쉬워 보이지만 제 첫 프로그램에서는 실용적인 문제가 있습니다. 표현식을 어떻게 평가할 것입니까? 예를 들어, "1 + 8 * z^2"이고 z가 "큰 정수"변수 인 mpz_t 인 경우, 이것을 어떻게 빨리 평가할 수 있습니까? (필자가 작성한 프로그램에서 더 큰 표현이 있습니다.) 현재 모든 단일 작업을 수동으로 수행하고 "1 + 8 * z^2"식의 임시 변수에 결과를 저장하고 있습니다.GMP에서 표현식 다루기

1) 제 mpt_mul (Z, Z, Z)는 Z를 정사각형으로 할

2) 다음에,이 (8)에 의해 값이 제

3) 단계 중 하나의 결과를 곱으로 "팔"라는 mpz_t 변수를 정의하고 임시 변수에 저장하십시오.

4)) 값 1

5 "일"이라는 mpz_t 변수를 정의 최종 답변을 찾기 위해 단계 3의 결과에 이것을 추가.

내가하고있는이게 이거 야? 아니면 더 좋은 방법이 있습니까? GMP가 사람을 시작하게하는 사용자 설명서가 있다면 도움이 될 것이지만 참조 설명서 만 있습니다.

답변

3

GMP는 C++ class interface과 함께 제공되며 산술 표현식을 표현하는보다 간단한 방법을 제공합니다. 이 인터페이스는 다음과 같이 작성할 수 있도록 C++ 연산자 오버로딩을 사용합니다.

mpz_class z; 
1 + 8 * z**2 

이것은 물론 C++을 사용한다고 가정합니다. C 만 사용하는 경우 운영자 과부하를 제공하지 않는 GMP에 C 인터페이스를 사용해야 할 수도 있습니다.

+0

예. 나는 순수한 C를 사용하고있다. –

+0

이 경우 올바른 접근법을 취하고있다. 이런 종류의 일을 많이 수행하려는 경우 C++ 로의 이동을 고려할 수 있습니다. –

2

"expr"하위 디렉토리에 GMP와 함께 배포되는 지원되지 않는 표현 구문 분석기가 있습니다. 이것은 GMP의 일부가 아니며 변경 될 수 있지만 해당 디렉토리의 README 파일에서 논의됩니다. 가능한 가장 빠른 방법으로 계산을하는 것은 보장되지 않으므로 구매자가주의하십시오.

따라서 사용자는이 라이브러리를 사용하거나 자체 표현 파서를 만들기 전에 GMP를 사용할 때 수동으로 모든 표현식을 평가해야합니다.