最新閲覧日:

検索しても情報が見つからなかったので教えてください。


Excelには、-1~+1までの間でランダムに数値を返す、RND関数がありますが、

RND + RND が返す値は-2~+2までの間でランダムな数となるのでしょうか?


また、RND × RND が返す値はどのような分布になるのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

数学的にはどうなるか。

0~1の一様乱数になっているx, yであって、しかもxとyが互いに独立(一方は、他方が幾らであるか、ということとは無関係である)とします。

 「0~1の一様乱数」ってのは、その確率密度関数をφ1(t)とすると、
  φ1(t) = (0≦t<1のとき1, さもなくば 0)
となっているということ。つまり、ヒストグラムを描けば「0≦t<1のとき一定値1であり、それ以外のtについては0である」ということです。(Fig 1赤)

 x + y の確率密度関数をφa(t)とすると
  φa(t) = (0≦t<1のときt, 1≦t<2のとき1-t, さもなくば 0)
になります。ヒストグラムを描けば二等辺三角形になっている。(Fig1青)

 x × y の確率密度関数をφm(t)とすると
  φm(t) = -ln(t)
となります。ここにln( )は自然対数です。(Fig1緑)

 それぞれの分布関数
  Φ(x) = ∫{t=0~x} φ(t) dt
を計算すると、
  Φ1(x) = (x<0のとき0, 0≦x<1のときx, 1≦xのとき1)  (Fig 2赤)
  Φa(x) = (x<0のとき0, 0≦x<1のとき(x^2)/2, 0≦x<1のとき(2-(x-2)^2)/2, 2≦xのとき1)  (Fig 2青)
  Φm(x) = (x<0のとき0, 0≦x<1のとき(1-ln(x))x, 1≦xのとき1)  (Fig 2緑)
「ランダム関数の足し算とかけ算」の回答画像4
    • good
    • 0

http://www.relief.jp/itnote/archives/001183.php

ここらへんが参考になるのかもしれないです。
    • good
    • 0

> Excelには、-1~+1までの間でランダムに数値を返す、RND関数がありますが、


手元のExcel 2007で試してみましたが、そんな関数は無かったです。
0以上1未満の乱数を返す、RAND関数なら有りましたが。
(Excel VBAにならRND関数がありますが、こちらも返す値は0以上1未満で、-1~+1ではありません。)


> RND + RND が返す値は-2~+2までの間でランダムな数となるのでしょうか?
仮にそういうRND関数があったとして、範囲は-2~+2になります。
ただし、確率密度関数は一様分布になりません。
(0付近が出現しやすく、-2や+2付近は出現しにくい。)

> RND × RND
こっちの範囲は0~+1になるでしょうね。2乗するのだから負の数は出現しないので。
確率密度関数はやっぱり一様分布にはなりません。
    • good
    • 0

まず、RND関数(ワークシート関数だとRAND関数)の返す値は、-1~+1ではなく、0~1未満(1は含まない)です。

Rnd関数はVBAで使用する場合ですね。返す値は同じです。

なので、RAND+RANDが返す値は0~2未満の範囲になります。
RAND関数は、擬似乱数を返す関数なので値の分布は一様分布です。要は0.1が出る確率と0.9が出る確率とは理論的には同じということです。

また、RAND×RANDが返す値の範囲は0~1未満の範囲になりますが、ご想像されてる通り分布は一様分布ではなくなります。下記リンク先にヒストグラムが有りますので見てください。

一様乱数の積は一様乱数にはならない
http://kashino.exblog.jp/12885005/
    • good
    • 0

このQ&Aに関連する人気のQ&A

このQ&Aと関連する良く見られている質問

QC#で別のFormへ複数の値を返そうとしているのですがうまくいきません

Form間の一データの受け渡しがうまくいったので、複数の値を返すために構造体を使って次のようにプログラムを作りましたがエラー表示(赤い波線)が出ます。どこがおかしいのでしょうか?
(参考にしたのは次のサイトです)
また、
http://sairoutine.hatenablog.com/entry/2014/02/12/204508

//----------------------------------------

//Form1
namespace SendVariable_Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void submitButton_Click(object sender, EventArgs e)
{
//Form2に送るテキスト
string sendText = SendtextBox.Text;

//Form2から送られてきたテキストを受け取る。
Form2.St_Btn_data receiveText = Form2.ShowMiniForm(sendText); //Form2を開く

//Form2から受け取ったテキストをForm1で表示する。
ReceivetextBox.Text = receiveText.string1;// ここでエラー
//string1のところに「...アクセスできない保護レベルになっています」と表示されます。

}
}
}

//-----------------------------------------------
//Form2
namespace SendVariable_Test
{
public partial class Form2 : Form
{
private string[] argumentValues; //Form1から受け取った引数
public St_Btn_data ReturnValue; //Form1に返す戻り値

public struct St_Btn_data
{
string string1;
string string2;
}

public Form2(params string[] argumentValues)
{
//Form1から受け取ったデータをForm2インスタンスのメンバに格納
this.argumentValues = argumentValues;

InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{
//Form1から送られてきたテキストをForm2で表示
this.F2ReceivetextBox.Text = argumentValues[0];

}

static public St_Btn_data ShowMiniForm(string s)
{

Form2 f = new Form2(s);
f.ShowDialog();
St_Btn_data receiveText = f.ReturnValue;
f.Dispose();

return receiveText;

}

private void Closebutton_Click(object sender, EventArgs e)
{
//戻り値をセット
this.ReturnValue = { string1 = F2SendtextBox1.Text, string2 = F2SendtextBox2.Text};// ここでエラー

this.Close();
}

}
}

Form間の一データの受け渡しがうまくいったので、複数の値を返すために構造体を使って次のようにプログラムを作りましたがエラー表示(赤い波線)が出ます。どこがおかしいのでしょうか?
(参考にしたのは次のサイトです)
また、
http://sairoutine.hatenablog.com/entry/2014/02/12/204508

//----------------------------------------

//Form1
namespace SendVariable_Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent...続きを読む

Aベストアンサー

public struct St_Btn_data
{
public string string1;
public string string2;
}

// ...

this.ReturnValue.string1 = F2SendtextBox1.Text;
this.ReturnValue.string2 = F2SendtextBox2.Text;

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報