2016-12-01 15 views
1

Rnd関数で古典的なプレイキューブ(値1〜6)をシミュレートする必要があります。私の解決策はRound(5 * Rnd() + 1, 0)ですが、1ミリオンの値を生成すると、良い結果が得られません(画像で)。 RESULTS HERE 私は、この問題はROUND関数を悪用していると思いますが、私はどこにいるのかわかりません。 あなたの答えをありがとう...ラウンド関数VBA EXCEL

+0

私が間違っている場合は、私を修正してください。しかし、この投稿は[Excel VBAのRnd()は本当にこの悪いですか?](http://stackoverflow.com/questions/38891165/is-excel-vbas-rnd-really-this-bad)と重複しているようです優れた答えです)。しかし、私はあなたのポストで質問を見逃しているように私は確信することはできません。また、 'Rnd()'を最初に初期化する必要があることに注意してください:http://stackoverflow.com/questions/26281011/excel-vba-rnd-not-actually-random – Ralph

答えて

5

この部分を見てみましょう。

Rnd()

だから 5 * Rnd() + 1我々は10半整数のいずれかであることが均等にそうであるとして、この数と考えることができ

1〜6の間の数を示します

0と1の間の数を示しますエリア:[1,1.5]、[1.5,2] ... [5.5,6]。

これらのいずれかは1 - [1,1.5]に丸めます。

これらのうち2つは、2 - [1.5,2]と[2,2.5]に丸められます。

3,4,5には同様に2つの丸いものがあります。これらの

一つは6に丸めます - [5.5,6]

これは、あなたが見ているディストリビューションについて説明します。

したがって、Round(6 * Rnd() + 0.5, 0)は、両方向で半分の領域を拡大するので、正確な重み付けを1と6に与えるので、探しているものを与えるはずです。

1

randbetween()を試しましたか?私のためにうまく働いた...

+0

Yop、Randbetweenも良い解決策です... –