[過去ログ] C言語なら俺に聞け 160 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
121: (オッペケ Sr6d-/dxN) 2023/01/19(木)20:45 ID:LuniV29Gr(1) AAS
大した精度は必要ないだろうし簡単なやつ探せば?
122(2): (ワッチョイ 9510-f6s+) 2023/01/20(金)13:52 ID:KaoK9Arp0(1) AAS
8bit時代にBASICのRND関数をアセンブラから呼び出す方法知らなくて、
ROM上のバイナリーデータから乱数作るルーチン組んだの思い出した。
(ROMから2バイトxn個のデータとって前回出力した値に足したりXORしたりと)
16bit DOS環境になっても似たようなの作ったなぁ(ROMの代わりに乱数表?作った)。
123: (ワッチョイ cd91-rGbT) 2023/01/20(金)13:55 ID:PBwN2qBR0(1) AAS
ROMから取り出しだと値が偏ったりしないかな?
124: (ワッチョイ 86cf-7DGa) 2023/01/20(金)16:51 ID:pV6+JPqV0(1) AAS
やったことないけど>>122見る限りりそんなに偏らないんじゃないかな
基本的にやりくちとしては暗号分野の鍵導出処理と似たようなことをしてるんだから
125: (スッップ Sdea-2YtF) 2023/01/20(金)18:40 ID:R9yntGVvd(1/3) AAS
暗号の乱数とゲームで使うような乱数は違うだろ
126(1): (ワッチョイ ed01-hn8B) 2023/01/20(金)18:58 ID:coXRsv3s0(1) AAS
値の範囲を調整するのに mod とると周期性が現れたり偏ったりするねんな
127(2): (ワッチョイ 2a47-w88e) 2023/01/20(金)19:06 ID:vRsHomcy0(1/3) AAS
>>122
リフレッシュカウンタから乱数を作るのがお約束ですよ、8 bit の時代はね
128(1): (スッップ Sdea-2YtF) 2023/01/20(金)19:28 ID:R9yntGVvd(2/3) AAS
>>127
そういうCPUやBASICROMに依存する方法は最新機種では動作が変わったり予測できないので商業レベルではやらなかった
かわりに線形合同などのアルゴリズムを使った
アーケードのプレイデモではジョイスティックとボタンの記録だけ取って再生してメモリを節約してたので
毎回同じ乱数パターン(敵の移動や弾発射)が獲得できないと困るので
129(1): (テテンテンテン MMde-tpib) 2023/01/20(金)20:01 ID:EscqwfOXM(1) AAS
>>126
とはいえ、0~10までの乱数取得するのに%使わずにどうしろと…
質の良い疑似乱数使えば問題無い
130(1): (スッップ Sdea-2YtF) 2023/01/20(金)20:28 ID:R9yntGVvd(3/3) AAS
疑似乱数にはたいてい周期性が現れるもの
とくに下の桁に現れやすいので
上の桁を取ればいい(modではなく目的の桁/乱数の最大桁をかける)
131(1): (ワッチョイ 6a36-f6s+) 2023/01/20(金)20:45 ID:A1RdTars0(1/2) AAS
>127
再現性のある乱数が欲しいって場合も微レ存。
132(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0a3e-w88e) 2023/01/20(金)21:21 ID:FDJF8fJ70(1/2) AAS
>>129
乱数源自体は良質なものだという前提で、
0~10 が欲しいときに単に %11 にすると小さい値のほうが少し出現率が高くなる。
たとえば乱数源がバイト単位だとすると、
255 以下で最大の 11 の倍数 (253) を超えた分 (254~255) が出現率を偏らせる原因。
だからそのような値が出たときに捨てて次の値を使用することにした上で %11 すればいい。
C++ の std::uniform_int_distribution などはだいたいそういう実装になってる。
133: (ワッチョイ 6a36-f6s+) 2023/01/20(金)21:27 ID:A1RdTars0(2/2) AAS
アセンブラで
MOV AL,8bit 乱数
MOV BL,欲しい整数乱数最大値+1
MUL BL
;AHに0からBL-1までの乱数が入る
ってなことやってたような気がする。
計算上最大値の出現率が低いみたい。
16bitに拡張すれば多少改善。
134: (ワッチョイ 2a47-w88e) 2023/01/20(金)22:44 ID:vRsHomcy0(2/3) AAS
>>128
そうですかね…
案外 LD A, R とかやってた気がするなあ…気がするだけですけどね
135(1): (ワッチョイ 2a47-w88e) 2023/01/20(金)22:45 ID:vRsHomcy0(3/3) AAS
>>131
8 bit の時代に、ですか?
結構念入りなアセンブラプログラムですねえ、めんどくさくって死にそう
136: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0a3e-w88e) 2023/01/20(金)23:11 ID:FDJF8fJ70(2/2) AAS
ファミコン、スーパーファミコン時代の有名ソフトの乱数生成の仕組みが今ではかなり明らかになってるが、
ドラクエとかファイナルファンタジーとかでも思ったより場当たり的な雑な仕組みで驚く。
こういう用途だと多少の性質の悪さもそれはそれで味になるということもあるんだろう。
シミュレーションとか暗号とかに関わるものだと理論的な裏付けがないと恐ろしいが……
137(1): (テテンテンテン MM7f-TAsf) 2023/01/21(土)00:33 ID:EJn7glvGM(1/5) AAS
>>130
いや、だから長周期な乱数が有るんだよ
間違いなくオマエが生きてる内に一週しないよ
下位バイトだって当然だ
周期してると思ったら死ぬまで見てれば周期してないのが分かるよ
138: (テテンテンテン MM7f-TAsf) 2023/01/21(土)00:40 ID:EJn7glvGM(2/5) AAS
1 2 2 と出て、2が偏ってと言う奴はいない
あまりにも範囲が小さいと、偏ってるかとか周期が有るかは長く見ないと分からん
139: (ワッチョイ 6fda-A+LD) 2023/01/21(土)00:51 ID:9x5I4Xif0(1) AAS
メルセンヌツイスタ
外部リンク:ja.wikipedia.org
140(1): (ワッチョイ cfcf-Jpma) 2023/01/21(土)00:55 ID:iEE3pXT90(1) AAS
>>137
周期の話じゃないよ 乱数発生器の下位ビットはランダムじゃないことがあるって話だよ
全部同じ値だったりrand()%2で0と1が交互に順番に出てくるだけだったりするから上位ビット使おうってこと
自前で乱数を作る際にmodを使わないなんてのはC言語のFAQレベルの常識の話だからちょっとネットでもあさって勉強すればすぐ身につくよ
それ以前に良い発生器を使えばいいっていうのはその通りだね
141(1): (テテンテンテン MM7f-TAsf) 2023/01/21(土)01:15 ID:EJn7glvGM(3/5) AAS
>>140
オマエが無知なの分かったよ
下位ビットが規則的になるってのは何も考えてない線形合同法だけの性質だ
msvcrtのrandは線形合同法で求めた32bitの内上位16bitを下位にシフトしてるから、そういう性質はない
他の長周期な乱数はなにもしなくても当然そんな性質はない
142: (テテンテンテン MM7f-TAsf) 2023/01/21(土)01:36 ID:EJn7glvGM(4/5) AAS
ちなみにLinux(glibc)で% 10で試しても、偶数と奇数が交互に続くと言うことはなかった
カルドセプトで話題になった乱数のバグは、自前で線形合同法を実装したから起きた問題だ
普通にSDKの乱数を使ってたら起きなかっただろう
143: (ワッチョイ 7f36-88l+) 2023/01/21(土)02:05 ID:sslkm/QP0(1) AAS
>135
8/16bit時代のティルナノーグってゲームがシナリオコードっての使ってマップやシナリオを自動生成するらしく、
まぁ多分シナリオコードを再現性のある乱数のキーにしてるんだろうと。
144(1): (スッップ Sd1f-iFXH) 2023/01/21(土)05:00 ID:Q9FQ3lI1d(1) AAS
>>141
結局下位のほうに周期性が現れやすいというのは肯定してるなw
ライブラリのを仕組みもわからずそのまま使うと問題が起きた時に危険なので自前で作ったほうが楽なこともあるんだよ
移植の問題もあるから
145: (ワッチョイ 6301-CtYK) 2023/01/21(土)11:13 ID:TvLSyCnz0(1) AAS
理想的な一様乱数であっても
頻度が一様から少し崩れる件については
>>132 でクリアになってる前提で
次に周期等の乱数の素性をああだこうだやってるのでいいんだよね?
146: (テテンテンテン MM7f-TAsf) 2023/01/21(土)12:57 ID:EJn7glvGM(5/5) AAS
>>144
線形合同法そのままの下位ビットはランダム性が低いから上位16bitを使うという実装がされてる
これは%で下位ビット使っても何も問題無い
他の乱数(例えばメルセンヌツイスターとか)とかも下位ビット使っても何も問題無い
オマエは何が言いたいんだ?
乱数イコール素の線形合同法と決めつけてんのか?
147: (ワッチョイ 7f47-j5s0) 2023/01/21(土)22:32 ID:PxhUXXTz0(1/2) AAS
それより MT を利用したストリーム暗号の実装を探しているんですが、誰か良さげなのを書いていませんかね?
148(1): (ラクッペペ MM7f-qqxO) 2023/01/21(土)23:01 ID:5FfejZmpM(1) AAS
暗号の実装なら乱数源よりハッシュ関数の設計の方が重要だと思うけど
149(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ ff3e-j5s0) 2023/01/21(土)23:09 ID:AnImjWZM0(1) AAS
メルセンヌツイスタは予測はしやすいので暗号に向かないって話じゃなかったっけ?
理論に詳しいわけじゃないけどストリーム暗号だと生成した乱数を
ほとんど順序通り使うことになるので素直に使うと弱い暗号になってまう。
それをカバーする案がどこかで出ているとかいう話なのかな?
150: (ワッチョイ 7f47-j5s0) 2023/01/21(土)23:25 ID:PxhUXXTz0(2/2) AAS
>>148-149
生成したMT乱数をハッシュに通して xor マスクに使えば今すぐにでも実装できまますが、馬鹿みたいにコストが高い
もっとお気楽に「暗号論的に安全な」マスクを生成する方法があるはず、と踏んでいます
>>149
生成された暗号列から、暗号生成系内の状態を推測する手段が
*****「ありうる」*****
というだけで、実際に MT において予測しやすいかどうかは、また別の問題かと
上下前次1-新書関写板覧索設栞歴
あと 852 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s