Java 2 (1.4) のドキュメントによれば、java.util.Random#nextInt(int n) の実装は
public int nextInt(int n) {
if (n<=0)
throw new IllegalArgumentException("n must be positive");
if ((n & -n) == n) // i.e., n is a power of 2
return (int)((n * (long)next(31)) >> 31);
int bits, val;
do {
bits = next(31);
val = bits % n;
} while(bits - val + (n-1) < 0);
return val;
}
となっているようですが、
return (int) (getDouble() * n) ; // もっとも簡単な実装
ではないのは何故ですか。精度上の問題があるのでしょうか?
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> return (int) (getDouble() * n) ; // もっとも簡単な実装
> ではないのは何故ですか。精度上の問題があるのでしょうか?
getDoubleって乱数を返すんだっけ?
調べたところ、乱数を取得できるのはnextDoubleのようなので
nextDoubleの間違いだと解釈しますね。
まずその方法には、得られる乱数がちゃんと一様分布しないという問題点があります。
nextDoubleは2の53乗通りの値を均等な確率で生成するので、
2の53乗を割り切ることができない値をnとすると必ず出現確率が偏ります。
あとは、その記述は書くのが楽なだけで、
nextDouble()内での2回のnextの呼び出しやシフト演算や除算や型変換、
そして最後のdoubleからintへの型変換など無駄な処理が多いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Ruby vscode 文字化け 1 2022/05/21 19:17
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# leetcode21 1 2022/04/21 11:53
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c# デリゲート関連の命名について
-
SAStrutsでActionからJSPに値を...
-
リサージュ図形
-
Javaでポインタ的なことはでき...
-
コード中の謎のエラー
-
javaのエラーの意味がわかりま...
-
デスクトップのアイコンの位置...
-
Javaで簡単なアニメーションを...
-
西暦 -> 年号、年号 -> 西暦の...
-
熟語を判別し構文解析してくれ...
-
式の型は配列型で int に解決済...
-
Start:アプレットは初期化され...
-
因数分解メソッドの改良
-
配列にnullを代入すると、null...
-
C#で動的配列Listの中身をListB...
-
C言語のポインターに関する警告
-
Javaで改行などが出来ないのです。
-
配列を逆順させて表示させる方...
-
応用情報技術者試験の令和元年...
-
getStringの値がNULLの時の処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
javaでカレンダー作成
-
Javaで電卓を作りたい
-
SwingでJtableのヘッダ行が表示...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
C#で実行時にメソッドの返り値...
-
(Swing)JTextFieldを半角のみ入...
-
c# デリゲート関連の命名について
-
Javaでポインタ的なことはでき...
-
複数のボタンを配置し、それぞ...
-
javaのエラーの意味がわかりま...
-
JUnit4のアノテーションについて
-
sin曲線とcos曲線を描くプログ...
-
intが負の時に投げる例外はあり...
-
Java 初心者 int型の取り扱い方
-
C++からC#のdllを参照する際、...
おすすめ情報