J'ai un problème dans lequel j'ai besoin d'être prêt à explorer une plus grande plage de nombres qu'un long non-dimensionné peut représenter (la plage étant représentée par 3^(n * n)). Cette communauté m'a conseillé d'utiliser GMP pour les nombres à plusieurs précisions. Puisque j'ai besoin de parcourir la plage un nombre à la fois, j'ai besoin d'un moyen d'incrémenter mon compteur facilement. Mon impulse est d'utiliser "mpz_add_ui (mon_counter, mon_counter, 1UL);", mais je crains que le fait de passer mon compteur à la fois comme argument de retour et comme ajout peut entraîner la corruption du résultat. Si la fonction change l'opérateur de retour pendant qu'il calcule la réponse, il peut changer le numéro de manière à ce que la réponse soit fausse. Il est peu probable que l'incrémentation cause des problèmes, mais qu'en est-il de l'ajout de deux grands mpz_t? Ou multiplier, ou même exponentiation? La documentation n'a rien pour calmer ou confirmer mes inquiétudes. J'ai essayé de regarder le code source, mais la combinaison de macros, de commentaires épars et de saut d'un fichier à un autre m'a amené à conclure que je ne suis pas assez bon pour le suivre.Dans GMP, le passage d'un type de précision multiple à la fois comme argument de retour et comme argument d'opérande fonctionne-t-il?
Pour être sûr, j'ai écrit une fonction qui montre le format que je suis assez certain qu'on va travailler, mais je voudrais bien mieux l'éviter parce que je suis certain qu'il va ralentir mon programme vers le bas:
void mpz_increment(mpz_t) {
mpz_t temp;
mpz_init(temp);
mpz_add_ui(temp, a, 1UL);
mpz_set(a, temp);
mpz_clear(temp);
}
Alors , ma question est la suivante. Est-il prudent de passer un type de précision multiple à une fonction arithmétique GMP comme argument de retour et l'un des opérandes, ou cela entraînera-t-il des résultats corrompus?
Ha ha, il fait. Merci d'avoir fait remarquer cela! – sadakatsu