1

私の現在の機能は次のようになります:

float random(){
    return (float)rand_xor128()/UINT_MAX;
}

しかし、値が float に変換されると、精度が失われることに気付きましたよね?

最初に double に変換する必要がありますか?

float random(){
    return (float)((double)rand_xor128()/UINT_MAX);
}

しかし、それは正しいことだとは感じません。どうすればいいですか?

4

1 に答える 1

0

[0,1)の範囲に絞り込みたい32ビット値があります。2^32そのためには、その範囲内のさまざまな値を表現できる必要があります。

Aには合計でfloat2^32`の可能な値があります。言い換えれば、フロートはあなたが必要とすることを決して行うことができません。doubleを返す場合は、これを実行できる可能性があります(正確に決定するために数値を実行していません)が、そうでない場合は、必要なことを正確に実行する独自のデータ型を作成する必要があります。

ただし、その値をfloatに格納すると、[0,1)の範囲で要件を満たすのに十分な精度がないため、精度が失われます。

于 2012-05-12T13:01:45.730 に答える