
No.6ベストアンサー
- 回答日時:
0~32767の乱数二つ(a,b)から、a*32768+b」という計算をすれば、0~1,073,741,823(0~10億)の範囲の乱数になります。
なお、「306個足す」や「2乱数のかけ算」は、やってはいけません。
それをやると、分布が一様ではなくなってしまいます。
(たとえば1~6な乱数源があるとします。この範囲の乱数を2つ足すと2~12の数値が出てきますが、この分布は一様ではなく、7が出やすく2や12は出にくいという偏ったものになります。また、1~6な乱数を2つ掛けると、1~36の数値が出てきますが、7とか11とか…35とか、絶対に出てくることのない数値が数多くでてきます。)
以上は、一般論的な乱数の数値範囲の拡張方法です。
ですが、通常のC/C++の標準ライブラリのrand関数はあまり精度がよくないので、
乱数2数の組を使うのはあまり薦められません。
(2数が全く無関連なら「a*32768+b」は一様な乱数になるのですが、
実際にはrand()関数はある乱数とその次の乱数に関連性があるため、「a*32768+b」は一様ではなく、偏りがでてきてしまいます)
ですので、rand を使うのはやめて、別の乱数関数を使ったほうが良いかと思います。
精度の良い乱数が欲しいのなら、メルセンヌツイスタを使うのが良いでしょう。
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ …
こちらからCのライブラリソースがダウンロードできます。
手軽さを求めるなら、Xorshift アルゴリズムは、たった10行程度のCの関数でrandより遙かに優れた乱数が得られます。
http://ja.wikipedia.org/wiki/Xorshift
とても詳しい説明ありがとうございます。
勉強になりました。
今回は手軽で負担が少なそうなXorshiftというのを使わせて頂こうと思います。
ありがとうございました。
No.8
- 回答日時:
とりあえずまともな乱数が欲しければメルセンヌツイスターを使え。
# http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ …
暗号用途向きではないけど、シミュレータ等の一般用途なら十分な精度があるし、それほど遅いわけでもない。
乱数は下手な加工をすると分布が乱れる。素人が変に捻ったことをするより、評価の固まったものを使う方が良い。
参考URL:http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ …
No.5
- 回答日時:
標準ライブラリの乱数のアルゴリズムはそんなに難しいものではありません。
http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC% …
自作してもたいした労力ではないと思います。
No.4
- 回答日時:
int val = (RAND_MAX + 1) * rand() + rand();
RAND_MAXが32767なら0~1073741823までの乱数が求まります。
RAND_MAXが32767(=2進で111 1111 1111 1111)、15bitが有効という前提であれば
int val = (rand() << 15) | rand();
としても同じです。
http://ja.wikipedia.org/wiki/Rand
に書かれているようにrandの精度は低いです。
もし乱数の精度を求めるなら、ほかのランダム生成を利用した方がよいです。
http://www.math.sci.hiroshima-u.ac.jp/~m-MAT/MT/ …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 統計学 Excelによるサンプルの拡大について 6 2023/08/22 16:03
- Java Java 石取りゲーム 3 2023/02/02 15:46
- その他(コンピューター・テクノロジー) エクセルの課題について 1 2022/07/25 14:39
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- メガネ・コンタクト・視力矯正 コンタクトの度数について。 2ヶ月ほど前に眼科で視力検査のもと、乱視用ワンデーを購入しました。 その 2 2022/04/20 11:28
- 軍事学 ウクライナの反転攻勢について 8 2023/06/17 08:37
- 生活習慣・嗜好品 不健康な人たち 1 2022/11/23 17:04
- その他(妊娠・出産・子育て) メリットのない子供なんかが増えるだけの少子化対策なんているのですか? 2 2022/05/12 21:17
- メガネ・コンタクト・視力矯正 眼鏡について 3 2022/05/28 20:37
- メガネ・コンタクト・視力矯正 コンタクトレンズの乱視補正について 1 2023/05/17 23:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
C#でTreeViewのCheckBoxのサイ...
-
visual studio 2022でのC#プロ...
-
略語の読み方について
-
c言語
-
C言語の関数のextern宣言
-
【C言語】全角文字の配列を、全...
-
最初に聞かれたこと
-
C言語 関数、変数の宣言について
-
あってる
-
C言語のことです。写真(見にく...
-
プログラミング言語についてc++...
-
UART通信の取説で,left floati...
-
パソコン
-
gccを行ってもexeファイルが生...
-
VisualStudio2022でC言語プログ...
-
C++でデスクトップGUIアプリ開...
-
C言語について。
-
C言語 解答について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows Media Playerを開くと...
-
Google ColaboでGUI作成
-
python urlopen error について...
-
システムコールと標準ライブラ...
-
iCloudフォトライブラリ内の画...
-
本格的なGUIを作るのにおすすめ...
-
C言語について。
-
ライブラリ作成時のグローバル...
-
設定ファイルを扱うライブラリ...
-
MFCとWIN32API
-
C++ 標準ライブラリの実際の中...
-
declaration of 'index' shadow...
-
Ps+のフリープレイでDestiny2の...
-
マウスのクリックを自動で
-
LIBCMT.LIBをリンクしてコンパ...
-
お絵かきソフトプログラミング...
-
ISOイメージの作成方法について
-
boostのアンインストールについて
-
C# EXCELセルの入力規則設定に...
-
unix-c と linux-c の違いは?
おすすめ情報