回答編集履歴

1

乱数の出し方

2019/11/24 15:53

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -23,3 +23,31 @@
23
23
  `low ≦ ans < low + high`となり、範囲がずれます。
24
24
 
25
25
  これはたまたまlowが0なので問題にはなっていませんが。
26
+
27
+
28
+
29
+ 乱数で得られる数は最大最小の差である必要があります。
30
+
31
+ ```java
32
+
33
+ static double getRandomDouble(double low, double high) {
34
+
35
+ double ans = 0.0;
36
+
37
+ double r = Math.random();
38
+
39
+ ans = low + r * (high - low);
40
+
41
+ return ans;
42
+
43
+ }
44
+
45
+ ```
46
+
47
+ こうすると、`0 ≦ r * (high - low) < high - low`なので、
48
+
49
+ `low ≦ ans < high`となります。
50
+
51
+ ただし、この場合highそのものが範囲に入らないので、intにキャストした場合もhighの値そのものが返ってくることがないことに気を付けてください。
52
+
53
+ highそのものを含めたい場合は、rに掛ける数に1を加えてください。