2016-11-13 1 views
-1

ich von der GMP beliebiger Genauigkeit arithmetische Bibliothek dieser Funktion bin mit:Wie Platzhalter für nicht benötigte Parameter in 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. 

ich die Werte von ‚g‘ oder ‚t‘ nicht brauchen und möchte nicht um Variablen für den alleinigen Zweck der Weitergabe an diese Funktion zu erstellen. Was kann ich tun, um etwas wie einen Platzhalter an diese spezifische Funktion zu übergeben, und wie kann ich das in C++ im Allgemeinen tun?

+0

Es funktioniert nicht so. Wenn eine Bibliotheksfunktion einen Parameter benötigt, muss dieser angegeben werden. Es ist möglich, dass ein bestimmter Parameter für eine Bibliotheksfunktion optional ist. Wenn dies der Fall ist, wird in der Dokumentation der Bibliotheksfunktion erläutert, welcher Wert für diesen Parameter übergeben werden soll. Weitere Informationen finden Sie in der Dokumentation der Bibliotheksfunktion. –

+0

Natürlich verstand ich, dass dies für Eingabeparameter wahr ist, aber ich dachte, dass ich etwas Willkürliches für Ausgabeparameter verwenden könnte, die ich nicht brauchte. Unglücklich. Vielen Dank! –

+0

"Wenn t NULL ist, dann wird dieser Wert nicht berechnet", zumindest für diesen Fall ist Ihre Antwort trivial. Wenn Sie die Aktualisierung von g überspringen möchten, können Sie sich den Code für 'mpz_gcdext' anschauen und ihn an Ihre Bedürfnisse anpassen, indem Sie den zugrundeliegenden' mpn_gcdext' selbst aufrufen. Obwohl dies nicht dokumentiert ist, können Sie s = NULL auch an die Funktion übergeben. Sie könnten einen Patch an GMP senden, der auch g = NULL erlaubt ... –

Antwort

-1

Sie könnten die Funktion überladen.

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); 
} 

Hilft das?

+0

Der Punkt war, zu vermeiden, Variablen zu deklarieren und zu initialisieren, die ich nicht brauchte. Das würde das immer noch tun. –

+0

ok. Wenn die Funktion mpz_gcdext diese Argumente erwartet, müssen Sie sie deklarieren und initialisieren. Die Überladung würde Sie das an nur einem Ort tun lassen, anstatt es überall zu tun, wo Sie mpz_gcdext nennen, aber Sie müssen es trotzdem irgendwo machen. – Waxrat

Verwandte Themen