質問するログイン新規登録

回答編集履歴

1

乱数の出し方

2019/11/24 15:53

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -10,4 +10,18 @@
10
10
  lowからhighの間の乱数を返すメソッドなのでしょうが、
11
11
  `0 ≦ r < 1`なので、`0 ≦ r * high < high`で、
12
12
  `low ≦ ans < low + high`となり、範囲がずれます。
13
- これはたまたまlowが0なので問題にはなっていませんが。
13
+ これはたまたまlowが0なので問題にはなっていませんが。
14
+
15
+ 乱数で得られる数は最大最小の差である必要があります。
16
+ ```java
17
+ static double getRandomDouble(double low, double high) {
18
+ double ans = 0.0;
19
+ double r = Math.random();
20
+ ans = low + r * (high - low);
21
+ return ans;
22
+ }
23
+ ```
24
+ こうすると、`0 ≦ r * (high - low) < high - low`なので、
25
+ `low ≦ ans < high`となります。
26
+ ただし、この場合highそのものが範囲に入らないので、intにキャストした場合もhighの値そのものが返ってくることがないことに気を付けてください。
27
+ highそのものを含めたい場合は、rに掛ける数に1を加えてください。