正規乱数をボックスミューらー法で発生させて、
範囲を指定して出力したいと思ってます。
プログラムを作成してみたのですが・・・
平均50で範囲を48から52にしたいのですが
たまに範囲外というか「0.0」が出力されてしまいます。
アドバイスをください
import java.util.*;
public class test2{
public static void main(String args[]){
double R,S;
double r[]=new double[200];
double s[]=new double[200];
double s1[]=new double[200];
Random ran=new Random();
for(int i=0;i<200;i++){
R=ran.nextDouble();
S=50+Math.sqrt(-2*Math.log(ran.nextDouble()))*Math.cos(2*Math.PI*(ran.nextDouble()));
r[i]=R;
s1[i]=S;
if(50-2<s1[i]){
if(50+2>s1[i]){
s[i]=s1[i];
}
}
}
for(int j=0;j<150;j++){
System.out.println(s[j]);
}
}
}
お願いします
No.3ベストアンサー
- 回答日時:
これは
if(50-2<s1[i]){
if(50+2>s1[i]){
のため48.0<s1[i]<52.0以外例えば
47.8や52.3のときはs[i]に0.0が代入
されているのですね。
なのでそれ以外のときは何を代入するかですが
単純に考えてその場合は出力しなければよいの
ですから
for(int j=0;j<150;j++){
if(s[j]!=0.0){//0でなければprintする。
System.out.println(s[j]);
}
}
No.4
- 回答日時:
こんにちは、
48~52の乱数、平均を50とすると、
1~5の乱数を作り、
47に加えれば良いのでは、ないでしょうか。
No.2
- 回答日時:
>たまに範囲外というか「0.0」が出力されてしまいます。
logやcosやsqrtは、定義域にない引数を渡すとエラーになります。
また、式の途中でオーバーフローが起こる可能性もあります。
その場合、
S=50+Math.sqrt(-2*Math.log(ran.nextDouble()))*Math.cos(2*Math.PI*(ran.nextDouble()));
は実行されないか、Sはオーバーフロー値になります。
結果、
s1[i]=S;
も実行されず、s1[i]は初期値(0.0)のままになります。
なので、このままでは、たまに0.0が出ます。
S=50+Math.sqrt(-2*Math.log(ran.nextDouble()))*Math.cos(2*Math.PI*(ran.nextDouble()));
を
S=0
S=Math.sqrt(-2*Math.log(ran.nextDouble()))*Math.cos(2*Math.PI*(ran.nextDouble()));
S=S+50
にしてみましょう。0.0は出なくなります。但し、オーバーフローや値域エラーの場合にSは最終的に50.0になるので「50.0だけ少し多く出現する」と言う偏りが出ます。
偏りを無くすには、オーバーフローと値域のチェックを行いましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0dの意味を教えてください
-
実数からの小数部の取得
-
べき乗
-
double型変数値の整数部分のみ...
-
割り算
-
Javaで何パーセント%かを表示...
-
doubleとintの違い
-
doubleで入力するには?
-
ループ処理の際、最後だけ","を...
-
JSPやサーブレットでSystem.out...
-
変数を動的に利用するには?
-
System.err. printlnとSystem.o...
-
オブジェクトの中のプロパティ...
-
ダブルクォーテーションのrepla...
-
C言語のポインターに関する警告
-
ORA-01858: 数値を指定する箇所...
-
IF関数でEmpty値を設定する方法。
-
C#で、あるクラスのメンバーす...
-
Javaで改行などが出来ないのです。
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実数からの小数部の取得
-
0dの意味を教えてください
-
べき乗
-
Javaで何パーセント%かを表示...
-
JAVAのプログラムで、2乗計算...
-
分を表す数値(int型)を、小数...
-
double型変数値の整数部分のみ...
-
javaの課題。。
-
javaで1.8x10の308乗÷...
-
少数50桁以上を表示するには
-
double型の足し算について
-
doubleについて
-
Javaコンパイルエラー
-
手入力された値を0.5区切りに変...
-
数値積分について
-
最大値と最小値の求め方
-
最大値を求めるプログラム
-
Javaのeval関数処理
-
javaでC++のdefine文に相当する...
-
Java math.powメソッド
おすすめ情報