2016-11-13 5 views
-1
나는 GMP 임의 정밀도 연산 라이브러리에서이 기능을 사용하고

:C에서 불필요한 매개 변수 ++에 대한 자리 표시자를 사용하는 방법

Function: void mpz_gcdext (mpz_t g, mpz_t s, mpz_t t, const mpz_t a, const mpz_t b) 

Set g to the greatest common divisor of a and b, and in addition set s and t to coefficients satisfying a*s + b*t = g. The value in g is always positive, even if one or both of a and b are negative (or zero if both inputs are zero). The values in s and t are chosen such that normally, abs(s) < abs(b)/(2 g) and abs(t) < abs(a)/(2 g), and these relations define s and t uniquely. There are a few exceptional cases: 

If abs(a) = abs(b), then s = 0, t = sgn(b). 

Otherwise, s = sgn(a) if b = 0 or abs(b) = 2 g, and t = sgn(b) if a = 0 or abs(a) = 2 g. 

In all cases, s = 0 if and only if g = abs(b), i.e., if b divides a or a = b = 0. 

If t is NULL then that value is not computed. 

내가 'g'또는 't'의 값을 필요로하지 않고, 좋아하지 않을 이 함수에 전달하는 유일한 목적을위한 변수를 생성합니다. 이 특정 함수에 자리 표시 자와 같은 것을 전달하려면 무엇을 할 수 있습니까? 어떻게하면 C++에서 일반적으로이 작업을 수행 할 수 있습니까?

+0

이렇게하면 작동하지 않습니다. 라이브러리 함수에 매개 변수가 필요한 경우 매개 변수를 지정해야합니다. 라이브러리 함수에 주어진 매개 변수가 선택적 일 수 있습니다. 그렇다면 라이브러리 함수 설명서에 해당 매개 변수에 대해 전달할 값을 설명 할 수 있습니다. 자세한 정보는 라이브러리 함수의. 서를 확인하십시오. –

+0

물론이 사실은 입력 매개 변수에 대해 사실 인 것으로 알고 있지만 필요하지 않은 출력 매개 변수에는 임의의 값을 사용할 수 있다고 생각했습니다. 불행한 사람. 감사합니다. –

+0

"t가 NULL이면 그 값은 계산되지 않습니다."그래서 적어도 하나는 답이 사소합니다. g 업데이트를 건너 뛰고 싶다면,'mpz_gcdext'의 코드를보고, 필요에 따라 mp'_gcdext'를 호출하면됩니다. 문서화되어 있지는 않지만 분명히 s = NULL을 함수에 전달할 수도 있습니다. g = NULL을 허용하는 GMP에 패치를 보낼 수 있습니다 ... –

답변

-1

기능에 과부하가 걸릴 수 있습니다.

void mpz_gcdext (mpz_t s, const mpz_t a, const mpz_t b) 
{ 
    mpz_t g, t; 
    // initialize g and t as needed 
    mpz_gcdext(g, s, t, a, b); 
} 

그게 도움이 되나요?

+0

요점은 내가 필요하지 않은 변수를 선언하고 초기화하는 것을 피하는 것이 었습니다. 이것은 여전히 ​​그렇게 할 것입니다. –

+0

확인. mpz_gcdext 함수가 이러한 인수를 예상하면 선언하고 초기화해야합니다. 과부하는 mpz_gcdext를 호출하는 대신 어디서나 할 수 있지만, 어딘가에해야합니다. – Waxrat