1. ホーム
  2. c++

[解決済み] 0 以上 1 未満の rand()

2022-03-12 09:15:17

質問

そこで、以下のコードで0 < r < 1を作成します。

r = ((double) rand() / (RAND_MAX))

なぜ r = ((double) rand() / (RAND_MAX + 1)) は-1 < r < 0になるのでしょうか?

RAND_MAX に 1 を足しても 1 < r < 2 にはならないのですか?

編集: 式中の整数のオーバーフローという警告が表示されました。

という行があるので、それが問題なのかもしれません。私はただ cout << r << endl で、確かに -1 から 0 の間の値が表示されます。

どのように解決するのですか?

これは完全に 実装に依存する が、あなたが作業しているC++環境ではそう見えるようです。 RAND_MAX と同じです。 INT_MAX .

このため RAND_MAX + 1 は未定義の(オーバーフローの)挙動を示し、次のようになります。 INT_MIN . 最初のステートメントでは、(0 の間のランダムな #) を分割していましたが INT_MAX )/( INT_MAX )を生成し、値 0 <= r < 1 を分割しています。 INT_MAX )/( INT_MIN ) を生成します。 -1 < r <= 0

乱数を生成するために 1 <= r < 2 が必要です。

r = ((double) rand() / (RAND_MAX)) + 1