Question

Je tente de stocker la valeur 0,9999 dans une variable mpfr_t en utilisant la fonction mpfr_set_str ()

0,9999 est arrondi à 1 (ou une autre valeur! = 0,9999) pendant le stockage, peu importe la valeur ronde (GMP_RNDD, GMP_RNDU, GMP_RNDN, GMP_RNDZ)

Alors, quelle est la meilleure méthode pour stocker 0,9999 dans une variable mpfr_t en utilisant mpfr_set_str ()? Est-il possible?

Voici mon programme de test, il imprime « tampon est: 1 », au lieu de la voulait « tampon est: 0,9999 »:

int main()
{

    size_t precision = 4;
    mpfr_t mpfrValue;

    mpfr_init2(mpfrValue, precision);
    mpfr_set_str(mpfrValue, "0.9999", 10, GMP_RNDN);

    char *buffer = (char*)malloc((sizeof(char) * precision) + 3);
    mp_exp_t exponent;

    mpfr_get_str(buffer,
                 &exponent,
                 10,
                 precision,
                 mpfrValue,
                 GMP_RNDN);

    printf("buffer is: %s\n", buffer);

    free(buffer);
    mpfr_clear(mpfrValue);

    return 0;
}

Merci pour l'aide

Était-ce utile?

La solution

précision est donné en bits pas en décimal chiffres, comme vous semblez supposer. Il semble que vous pouvez réimprimer la valeur correcte à 4 chiffres décimaux avec 15 bits de précision. En outre, vous pouvez produire directement à l'aide mpfr_printf.

Si vous avez besoin d'utiliser mpfr_get_str, je passe null comme premier paramètre. Si vous faites que la chaîne est allouée pour vous. Ensuite, pour le libérer vous mpfr_free_str appelez.

int main()
{
    size_t precision = 15;
    mpfr_t mpfrValue;

    mpfr_init2(mpfrValue, precision);
    mpfr_set_str(mpfrValue, "0.9999", 10, GMP_RNDN);

    mpfr_printf("Value is: %Rf\n", mpfrValue);
    mpfr_clear(mpfrValue);
    return 0;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top