質問

MPFR_SET_STR()関数を使用して、値0.9999をMPFR_T変数に保存しようとしています

しかし、0.9999は、丸値(GMP_RNDD、GMP_RNDU、GMP_RNDN、GMP_RNDZ)に関係なく、ストレージ中に1(または他の値!= 0.9999)に丸められます。

それでは、MPFR_SET_STR()を使用してMPFR_T変数に0.9999を保存するための最良の方法は何ですか?出来ますか?

これが私のテストプログラムです、それは「バッファーIS:1」を印刷します。

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

助けてくれてありがとう

役に立ちましたか?

解決

精度はです ビットで与えられます, 、あなたが仮定しているように見えるように、小数桁ではありません。正しい値を15ビットの精度で4桁までに転載できるようです。また、mpfr_printfを使用して直接出力できます。

MPFR_GET_STRを使用する必要がある場合は、最初のパラメーターとしてnullを渡します。それを行うと、文字列が割り当てられます。次に、それを解放するために、MPFR_FREE_STRを呼び出します。

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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top