7

32 ビットの浮動小数点数では、2^31 - 1 の表現可能な浮動小数点数のようなものがあると思います。Java では、Math ライブラリを使用して既存のフロートを取得し、「次のフロート」を見つけることができます。しかし、最初のフロートがない場合、n 番目のフロートを計算する方法はありますか? どの言語でも構いませんが、ライブラリ機能のある言語があれば採用します。

もちろん、単純にすべての float を配列に入れ、それにインデックスを付けることができますが、それはスペース効率が悪いです。

ここにいくつかのさらなる説明があります。Float.MIN から開始し、nextFloat を使用して N 回インクリメントすることもできますが、この操作を何度も実行する必要があるため、効率が悪いようです。

4

1 に答える 1

7

どのように注文するかによって異なります。すべてのフロートが順序付けられているわけではないことに注意してください。たとえば、異なる NaN のペアは順序付けされていません (つまり、それらは等しくないが、どちらも他方よりも大きくない)。

それらで終わっても構わない場合は、整数を浮動小数点数として再解釈できます。これを行う方法は言語によって異なります。ここにCの実装があります:

float int_to_float(uint32_t in) {
    union {
        float f;
        uint32_t i;
    } u;

    u.i = in;
    return u.f;
}

これには、ほぼ順序付けされた結果が得られるという便利な特性があります。0 を渡すと 0.0 が取得され、1 を渡すと 1.4e-45 が取得され、2 を渡すと 2.8e-45 が取得されます。NaN/Inf 値に入ると、結果はおかしくなり始め、0x80000000 (-0.0) に達すると最終的に減少し始めますが、今のところはこれで十分です。

于 2012-06-14T19:19:45.247 に答える