
No.1ベストアンサー
- 回答日時:
具体的にどの様な方法か、は知りませんが、たとえばこんな方法があります。
a=初期値、たとえば123
x=a*987
a=mod(x,777) 987も777も例です。
これは昔FORTRANの教科書にあった方法です。この初期値をシード(種)と呼びます。RANDOMIZEでこのシードを変更することで同じ乱数列が発生しないようにしています。
RANDOMIZEで新しいシードを作る方法も色々あります。たとえば、そのときの時刻から求めると言うような方法があります。
なお、上記のMODを使う方法を単純に使うと、循環数列になったり、同じ数が続いたりします。そこで、実際にはもう少し手を加えているそうです。
MOD以外の方法としては、何かの演算(ルートなど)をしてできた数字列の中央部から何文字かを取り出す、などの方法もあります。上手く説明できなくてごめんなさい。
直接的な回答になっていませんが、雰囲気は掴んでもらえたかと思います。
No.8
- 回答日時:
こちらのページで概略がわかります.
こちらのページからのリンクで,いくつかの乱数発生方法の
説明が見られます.
http://www.kinyuu.co.jp/report/rep000303.htm
参考URL:http://www.kinyuu.co.jp/report/rep000303.htm
No.7
- 回答日時:
(2)
0以上の整数mについてx^mをf(x)で割った余りの係数ベクトルをv[m](nビットバイナリデータ)としたとき
v[k],v[k+1],v[K+2],v[k+3],・・・・
が0を除くnビット以下のバイナリデータをすべて取る疑似乱数である
No.6
- 回答日時:
疑似乱数が本格的な乱数発生のアルゴリズムです
0と1からなる体をKとし
nを自然数とし
f(x)が体Kの元を係数とするn次多項式であって
1=x^0,x^1,x^2,・・・,x^(2^n-2)をf(x)で割った余りがすべて異なるとする
(このような多項式f(x)を原始多項式といい必ず存在するとことがガロア理論によって証明されている)
乱数発生アルゴリズム:
(1)
0以上の整数kを任意に決定する(初期値)
(2)
x^kをf(x)で割った余りの係数ベクトルをv[k](nビットバイナリデータ)としたとき
v[0],v[1],v[2],v[3],・・・・
が0を除くnビット以下のバイナリデータをすべて取る疑似乱数である
これは2^n-1の周期で繰り返すが
n=16とすると周期は65535であり
n=32とすると周期は4294967295である
No.4
- 回答日時:
私の表現がまずくて、誤解されるといけないので補足の追加と、ポイントの再確認をしておきます。
1)一般に計算機で用いる乱数は計算で求めた疑似乱数です。完全な乱数ではあり得ませんが、実用上十分な乱数が出ます。
2)計算で求めていますから、この乱数(乱数列)は再現できます。再現できると言うことは重要なことです。乱数を何かのシミュレーションに用いたい場合、特に重要な科学的計算を行いたいときは、再現できることが重要です。科学の世界では再現実験が重要です。
3)乱数発生の時刻によって乱数列が変わるのではなく、seedを変えない限り勝手に変わら無いようにしています。勝手に変わっては困るのです。
4)以上をふまえた上での話ですが、実際のVBでの乱数発生アルゴリズムを私は知りません。先の書き込みは教科書レベルでの話です。ランダマイズのさせ方も同じように教科書レベルの話です。本当にランダマイズに時刻を用いているかどうかもわかりません。
実際のアルゴリズムについては、#3さんが紹介されたところが参考になるかもしれません。
※乱数は科学的にも、軍事的にも重要な理論/技術です。暗号関係の本などを勉強されると良いかもしれません。
そういえば乱数表という、数字が羅列されただけの本も出版されています(いました)。少なくとも過去にはありましたが、最近は見かけません。PCで簡単に乱数を発生させることができるので、このような本は不要になってきたのでしょう。乱数表は科学実験や経済の動きの解析、戦争のシミュレーションなど広範囲で使われます(ました)。
No.3
- 回答日時:
いろいろなアルゴリズムがあるはずです.
(専門家ではないので,よく知りません)
その一例としてMersenne Twisterというのがあるようです.
ここで擬似乱数発生するプログラムのソースコードが
見られるようです.(開発者によるページ)
http://www.math.keio.ac.jp/~matumoto/mt.html
参考URL:http://www.math.keio.ac.jp/~matumoto/mt.html
No.2
- 回答日時:
VBのコンポーネントである乱数ジェネレータを使用した場合、
タイミングの問題で同じ数字になることがよくあります。
たとえ、ランダマイズを使用したところで、仕様で決まった範囲内の
数値しかありませんし、増加の仕方も決まっています。
その為、完全なランダムの発生は無理であり、より細分化した処理により
範囲の選択肢を増やすしかありません。処理は、VBで考えたことが
ありませんので、省かせてください。
Randomizに使用するTimer関数は、午前0時から経過した秒数を
表す単精度浮動小数点数型の値を返します。
その為に、同時刻の同秒にプログラムを起動すると、同じ乱数が発生する
わけです。
こんなのでいいですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 乱数の表示 4 2022/10/12 10:43
- 政治 国会議員の役目:国会議員の仕事は日本を良くすることです。 本当に良くしてますでしょうか?(笑) 2 2022/08/19 20:54
- パチンコ・スロット パチンコ当たり抽選 3 2022/04/20 23:26
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- Java Java 石取りゲーム 3 2023/02/02 15:46
- 数学 ロト6の当選確率 3 2022/06/09 22:47
- ダイエット・食事制限 筋トレは毎回現在の限界(筋肉を壊す作業)までやらないと意味も効果もないというのは当たってまよね? 例 3 2023/04/13 14:32
- 数学 リーグ戦で昇級、降級の考え方 5 2022/06/19 14:28
- 教えて!goo こちらの質問の回答 82個すべて同じ数字なのですが なぜこのような状態になるのかわかりますか? 4 2022/11/14 08:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
あのビル・ゲイツもやったオセ...
-
一般的な解法を用いないで魔法...
-
power setの計算
-
BCDについて
-
動画で間違ったこと言っている
-
巡回セールスマン問題
-
評価関数に強くなる本
-
最大公約数を求めたい!
-
ベイチ・カルノー図以外のとき方。
-
乗換案内の作り方が知りたいです。
-
画像から文字を認識してテキス...
-
アルゴリズムが苦手な人の、特...
-
期間重複チェックがわかりません
-
複数の点を最短距離で全て繋ぐ...
-
あるプログラムのコマンドライ...
-
銃を発砲するならともかく、日...
-
OS入ってる機器のソフト・アプ...
-
VBAで仕様書は書きますか?
-
POSTを使って、アプリを操作したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
[ EXCEL VBA ] 図形を読み込む...
-
グループを均等に分けるには?...
-
シードを考慮したトーナメント...
-
アルゴリズムとプロトコールの違い
-
期間重複チェックがわかりません
-
あいまい検索(文字列一致率)
-
C♯で電卓を作成しています。演...
-
お薦めのアルゴリズム参考書
-
ランダム関数を作りたい。
-
暗号化・復号化のアルゴリズム...
-
多変数関数の最小値を求めるプ...
-
ハッシュアルゴリズム
-
一般的な解法を用いないで魔法...
-
偏りのある乱数のアルゴリズム
-
BCDについて
-
アルゴリズムが全くわからない
-
データを圧縮したい
-
ドロネー三角形のプログラム
-
カオス解析のプログラムについて
おすすめ情報