0

ランダムな double を生成するには、drand48 がありますが、

これらの関数は、代わりに rand(3) を使用する必要があると述べている SVID 3 によって廃止されたと宣言されています。

drand48 でランダムな double を構築するにはどうすればよいですか? ちなみに、ランダムフロート?

intfromrand()とキャストを 単純に 2 つ連結すると が発生する可能性がNaNあり、これは受け入れられません。double に 32 個のランダム ビットのみを使用することは避けたいと思います。

4

1 に答える 1

4

Linux のマニュアル ページで廃止された標準が引用されているのは残念です。正しく見れば、SVID 3 は 1986 年に公開され、長い間廃止されていました。POSIX にはこの一連の関数があり、段階的に廃止する予定はありません。

しかし、あなたがそれに取り組んでいるなら、erand48代わりに使用することを検討してくださいdrand48。自分でシード状態を提供できるという利点があります。そのため、再入可能であり、スレッド化された環境で使用する場合 (およびスレッドのシードを別の方法で初期化する場合) に一般的に動作が向上するか、再現可能なシミュレーションに必要な場合は決定論的です。

唯一の小さなことは、48 ビットの疑似乱数しか得られないことを念頭に置いておく必要があるということです。通常doubleの演算は 52 ビットなので、下位 4 ビットはダメなので注意してください。

于 2012-09-05T21:07:18.140 に答える