2016-10-16 4 views
0

내가 함께 일부 부동 소수점 숫자를 추가하는 단순한 프로그램을 작성하여 C의 GMP 라이브러리를 사용하는 방법을 배울려고하지만, 런타임에 불평 :C에서 GMP 라이브러리를 사용하여 float 값을 할당하는 방법은 무엇입니까?

: 여기
GNU MP: Cannot allocate memory (size=140735132293330) 
Aborted (core dumped) 

코드입니다
#include <gmp.h> 
#include <stdio.h> 

int main(){ 
    mpf_set_default_prec(64); 

    mpf_t sum; 
    mpf_init(sum); 
    mpf_set_ui(sum,0); 
    unsigned int i = 0; 

    while (i < 4) { 
    mpf_add_ui(sum,sum,i); 
    i++; 
    } 

    mpf_out_str(stdout,10,sum); 
    printf ("\n"); 
    mpf_clear(sum); 
} 

저는 GMP mpz 기능을 사용하여이 문제를 해결할 수 있었지만,이 문제를 해결하기 위해 플로트로 시도해 보았습니다. 설명서에 실제로 float 함수의 실제 예제가 표시되지 않으므로 값을 잘못 초기화하거나 지정하고 있습니다. , the documentation에서

size_t mpf_out_str (FILE *stream, int base, size_t n_digits, const mpf_t op) 
//           ^^^^^^^^^^^^^^^^ 
+1

* 항상 * 엄격한 표준 준수 모드에서 컴파일러를 사용하고 사용 가능한 모든 경고를 활성화하십시오. 해결할 때까지 스택 오버플로에 게시하지 마십시오. 99 %의 프로그래밍 문제는 기존 도구로 완전히 자동 진단됩니다. –

답변

2

:

+0

고마워, 여하튼 나는 그것을 놓쳤다. – deltaray

+0

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68052라고 생각합니다. –

2

당신은 제대로 컴파일러 경고를 확인하지 않은해야하지만 간단한 오류는 당신이 the documentation에서 찾아 볼 수 인수의 잘못된 번호로 mpf_out_str를 호출하고 있다는 것입니다

은 그 gmp.h이 이러한 기능에 대한 프로토 타입을 정의 할 수 있기 때문에, gmp.h 전에 STDIO.H를 포함하는 것이 좋습니다

잘못된 수의 인수로 함수를 호출하므로 오류가 발생합니다. 선언 부족에 대한 경고 메시지가 표시되지 않는 이유는 mpf_out_str이 gmp.h에 정의 된 매크로이기 때문입니다.이 매크로는/usr/include에 설치되어 시스템 헤더로 간주되므로 경고가 비활성화됩니다 (use 그것을 보려면 -Wsystem-headers). 이것은 gcc의 오판과 같은 느낌입니다 ...

+1

[데모] (http://melpon.org/wandbox/permlink/kREQwZUn6FOgqqCD) –

+0

그리고 나는 이것도 놓쳤습니다. 이제 그 일. – deltaray

관련 문제