4

CでGMPを使用しています。mpz_tをfloatの値に設定することは可能ですか?

4

1 に答える 1

6

はい、mpz_set_dこの目的で使用できる関数があります。

void mpz_set_d (mpz_t rop, double op);

フロートはC自体によってダブルにアップグレードされ、GMPはそれをmpz_tタイプに変換します。

mpz_tただし、これは整数型であるため、精度が低下する可能性があることに注意してください。longフロートを使用してタイプよりも大きい整数を保持している場合は、それで問題ありません。

実際の浮動小数点値を処理する場合は、おそらくを使用する必要がありますmpf_t


拡張するために、ここにいくつかのサンプルコードと出力があります:

#include <stdio.h>
#include <values.h>
#include <gmp.h>

int main (void) {
    float f = MAXFLOAT;

    mpz_t num;
    mpz_init_set_d (num, f);

    printf ("Max float: %f\n", f);
    printf ("As mpz_t : ");
    mpz_out_str (stdout, 10, num);
    putchar ('\n');

    return 0;
}

mpz_init_set_d (num, f)コードを単純化するためにcombinedを使用していることに注意してください。これは、次の2つのステートメントと同等です。

mpz_init (num);
mpz_set_d (num, f);

上記のプログラムは以下を出力します:

Max float: 340282346638528859811704183484516925440.000000
As mpz_t : 340282346638528859811704183484516925440
于 2010-05-08T00:21:10.767 に答える