0

ウィキペディア(またはSO)またはこの非常に単純な質問のドキュメントで答えを見つけることができませんでした。

浮動小数点数の精度は整数でどのように表されますか?

MPFRC++の任意精度浮動小数点ライブラリのラッパーをMPFR使用していますC++デフォルトの精度を設定するオプションがあり、引数として整数を取ります。

そのような整数はどういう意味ですか?

例: set_default_prec(128)

また、さまざまなデフォルトの精度をチェックしsizeofますが、それらは常に同じように見えますか?なんで?

例えば:

set_default_prec(128); sizeof(mpfr :: mpreal); // 16

set_default_prec(4096); sizeof(mpfr :: mpreal); //まだ16..。

4

2 に答える 2

5

set_default_prec間違いなく、データを格納するために割り当てられるストレージの量 (ビット数) が変わります。10 進数の 1 桁を格納するには約 3.5 ビットかかるため、そこから簡単な計算を使用して、特定の桁数に必要なバイト数を計算します。

一定のままである限りsizeof、実際のデータへのポインターのみを含む構造体 (またはクラス) があることは間違いありません。一般的な順序は次のとおりです。

namespace mpfr {
    struct real { 
        char *data;
        size_t size_allocated;
        size_t size_inuse;
        size_t num_digits;
    };
}

精度を変更すると、num_digits に格納されている値が変更され、dataポイントするブロックのサイズが変更される可能性がありますが、構造体のサイズは一定のままです。

于 2012-04-23T18:47:52.813 に答える
1

必要なものはすべて、「浮動小数点」と「精度」のグーグルで見つけることができます。例えば:

http://en.wikipedia.org/wiki/Floating_point

浮動小数点表現は、科学表記法と概念が似ています。論理的には、浮動小数点数は次のもので構成されます。

指定された基数 (または基数) の指定された長さの符号付き数字列。この数字列は仮数、係数、または仮数と呼ばれることはあまりありません (以下を参照)。仮数の長さによって、数値を表現できる精度が決まります。基数ポイントの位置は、常に仮数内のどこかにあると見なされます。多くの場合、最上位桁の直後または直前、または最下位 (最下位) 桁の右側です。この記事では、通常、基数が最上位 (左端) の数字の直後にあるという規則に従います。

言い換えると:

  1. 浮動小数点数は「概算」であり、必ずしも正確な値ではありません

  2. 浮動小数点数の「精度」によって、近似の精度が決まります。ビット数が多いほど精度が高くなります(数値は「より正確」です)。ビット数が少ないほど、精度が低くなります (数値は「丸められます」)。

  3. 「精度」の量は、整数として表すことができます。

MPFR Web サイトから:

http://www.mpfr.org/mpfr-current/mpfr.html#MPFR-基本

浮動小数点数、または略して浮動小数点数は、限られた精度の指数を持つ任意の精度の仮数 (仮数とも呼ばれます) です。...

精度は、浮動小数点数の仮数を表すために使用されるビット数です。対応する C データ型は mpfr_prec_t です。精度は、MPFR_PREC_MIN と MPFR_PREC_MAX の間の任意の整数にすることができます。現在の実装では、MPFR_PREC_MIN は 2 です。 ...

もちろん、「set_default_prec()」は精度を (「2」から) 変更するためのメカニズムです。

于 2012-04-23T18:46:48.470 に答える