C言語なら俺に聞け 160

■ このスレッドは過去ログ倉庫に格納されています
2022/12/28(水) 10:40:30.02ID:PyoNDBFu0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 159
https://mevius.5ch.net/test/read.cgi/tech/1659623547/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/01/18(水) 21:01:43.52ID:6nsqd3vSd
共用体で定義すればキャストを使った汚いコードを書かなくて済む
しかし共用体も今日ではあまりエレガントとも言えないのでは
2023/01/18(水) 21:24:32.21ID:ZQLfTfm70
人間が入力するときに
コントロールコードとかも拾いたい時があるからなあ
文字列だけではうまくいかない
2023/01/18(水) 21:41:20.89ID:4Z5GD2tK0
>>107-108
エンディアン独立ですか?
2023/01/18(水) 21:50:27.28ID:aaaF5ns00
良い質問だ、自分で調べると勉強になる
2023/01/18(水) 22:02:01.63ID:XcLAtUHa0
ソケットのINETADDRで
2023/01/18(水) 22:16:14.48ID:fAl7sUlA0
組込み用途ではSFRのアドレス番地に割り当てた変数に対して
char型と8bitのビットフィールド構造体の共用体
short型とchar型2要素の配列と16bitのビットフィールド構造体の共用体
などがよく使われる
2023/01/18(水) 23:16:00.76ID:5annSIeD0
自分のところのプロジェクトでは構造体でキャストする式にマクロで名前をつけてるな
2023/01/19(木) 00:26:10.20ID:SdwPSqPz0
昔のcobolのコードが生きていて
メモリを節約するために領域を再利用している
可能性はあるな
書き直した方がましだが
2023/01/19(木) 08:31:08.40ID:m5q+i06r0
>正規分布からランダムにサンプリングするだけでしょ?

>ボックスミューラーは使わないよね

なんかおかしくない?
前者は正規分布関数の値をランダムに抽出する 値域は 0 ~0.3989
後者は分布が正規分布となる乱数 値域は -∞ ~ ∞ (実用的には -4 ~ 4)
2023/01/19(木) 08:56:49.28ID:ePSJbuliM
標準正規分布の確率密度関数の値なら>>22の数式に確率変数の値を与えれば得られる
何の意味があるのかは知らん
もし積分値を得たいならランダムではなくて累積でないと意味ないぞ
2023/01/19(木) 15:11:00.82ID:TnS/SbOWd
違う、、、そうじゃ無い、、、
2023/01/19(木) 15:12:40.77ID:TnS/SbOWd
>>118
話題のdiffusion model のコードを書いてるの
2023/01/19(木) 20:45:09.38ID:LuniV29Gr
大した精度は必要ないだろうし簡単なやつ探せば?
2023/01/20(金) 13:52:09.56ID:KaoK9Arp0
8bit時代にBASICのRND関数をアセンブラから呼び出す方法知らなくて、
ROM上のバイナリーデータから乱数作るルーチン組んだの思い出した。
(ROMから2バイトxn個のデータとって前回出力した値に足したりXORしたりと)

16bit DOS環境になっても似たようなの作ったなぁ(ROMの代わりに乱数表?作った)。
2023/01/20(金) 13:55:55.25ID:PBwN2qBR0
ROMから取り出しだと値が偏ったりしないかな?
2023/01/20(金) 16:51:45.29ID:pV6+JPqV0
やったことないけど>>122見る限りりそんなに偏らないんじゃないかな
基本的にやりくちとしては暗号分野の鍵導出処理と似たようなことをしてるんだから
2023/01/20(金) 18:40:05.00ID:R9yntGVvd
暗号の乱数とゲームで使うような乱数は違うだろ
2023/01/20(金) 18:58:44.32ID:coXRsv3s0
値の範囲を調整するのに mod とると周期性が現れたり偏ったりするねんな
2023/01/20(金) 19:06:38.00ID:vRsHomcy0
>>122
リフレッシュカウンタから乱数を作るのがお約束ですよ、8 bit の時代はね
2023/01/20(金) 19:28:35.95ID:R9yntGVvd
>>127
そういうCPUやBASICROMに依存する方法は最新機種では動作が変わったり予測できないので商業レベルではやらなかった
かわりに線形合同などのアルゴリズムを使った
アーケードのプレイデモではジョイスティックとボタンの記録だけ取って再生してメモリを節約してたので
毎回同じ乱数パターン(敵の移動や弾発射)が獲得できないと困るので
2023/01/20(金) 20:01:16.13ID:EscqwfOXM
>>126
とはいえ、0~10までの乱数取得するのに%使わずにどうしろと…
質の良い疑似乱数使えば問題無い
2023/01/20(金) 20:28:16.76ID:R9yntGVvd
疑似乱数にはたいてい周期性が現れるもの
とくに下の桁に現れやすいので
上の桁を取ればいい(modではなく目的の桁/乱数の最大桁をかける)
2023/01/20(金) 20:45:14.37ID:A1RdTars0
>127
再現性のある乱数が欲しいって場合も微レ存。
2023/01/20(金) 21:21:15.74ID:FDJF8fJ70
>>129
乱数源自体は良質なものだという前提で、
0~10 が欲しいときに単に %11 にすると小さい値のほうが少し出現率が高くなる。
たとえば乱数源がバイト単位だとすると、
255 以下で最大の 11 の倍数 (253) を超えた分 (254~255) が出現率を偏らせる原因。

だからそのような値が出たときに捨てて次の値を使用することにした上で %11 すればいい。
C++ の std::uniform_int_distribution などはだいたいそういう実装になってる。
2023/01/20(金) 21:27:39.82ID:A1RdTars0
アセンブラで

MOV AL,8bit 乱数
MOV BL,欲しい整数乱数最大値+1
MUL BL
;AHに0からBL-1までの乱数が入る

ってなことやってたような気がする。
計算上最大値の出現率が低いみたい。
16bitに拡張すれば多少改善。
2023/01/20(金) 22:44:15.60ID:vRsHomcy0
>>128
そうですかね…
案外 LD A, R とかやってた気がするなあ…気がするだけですけどね
2023/01/20(金) 22:45:17.95ID:vRsHomcy0
>>131
8 bit の時代に、ですか?
結構念入りなアセンブラプログラムですねえ、めんどくさくって死にそう
2023/01/20(金) 23:11:55.26ID:FDJF8fJ70
ファミコン、スーパーファミコン時代の有名ソフトの乱数生成の仕組みが今ではかなり明らかになってるが、
ドラクエとかファイナルファンタジーとかでも思ったより場当たり的な雑な仕組みで驚く。
こういう用途だと多少の性質の悪さもそれはそれで味になるということもあるんだろう。

シミュレーションとか暗号とかに関わるものだと理論的な裏付けがないと恐ろしいが……
2023/01/21(土) 00:33:34.31ID:EJn7glvGM
>>130
いや、だから長周期な乱数が有るんだよ
間違いなくオマエが生きてる内に一週しないよ
下位バイトだって当然だ
周期してると思ったら死ぬまで見てれば周期してないのが分かるよ
2023/01/21(土) 00:40:48.68ID:EJn7glvGM
1 2 2 と出て、2が偏ってと言う奴はいない
あまりにも範囲が小さいと、偏ってるかとか周期が有るかは長く見ないと分からん
2023/01/21(土) 00:51:58.56ID:9x5I4Xif0
メルセンヌツイスタ
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%AB%E3%82%BB%E3%83%B3%E3%83%8C%E3%83%BB%E3%83%84%E3%82%A4%E3%82%B9%E3%82%BF
2023/01/21(土) 00:55:32.36ID:iEE3pXT90
>>137
周期の話じゃないよ 乱数発生器の下位ビットはランダムじゃないことがあるって話だよ
全部同じ値だったりrand()%2で0と1が交互に順番に出てくるだけだったりするから上位ビット使おうってこと
自前で乱数を作る際にmodを使わないなんてのはC言語のFAQレベルの常識の話だからちょっとネットでもあさって勉強すればすぐ身につくよ
それ以前に良い発生器を使えばいいっていうのはその通りだね
2023/01/21(土) 01:15:16.87ID:EJn7glvGM
>>140
オマエが無知なの分かったよ
下位ビットが規則的になるってのは何も考えてない線形合同法だけの性質だ
msvcrtのrandは線形合同法で求めた32bitの内上位16bitを下位にシフトしてるから、そういう性質はない
他の長周期な乱数はなにもしなくても当然そんな性質はない
2023/01/21(土) 01:36:04.58ID:EJn7glvGM
ちなみにLinux(glibc)で% 10で試しても、偶数と奇数が交互に続くと言うことはなかった
カルドセプトで話題になった乱数のバグは、自前で線形合同法を実装したから起きた問題だ
普通にSDKの乱数を使ってたら起きなかっただろう
2023/01/21(土) 02:05:39.28ID:sslkm/QP0
>135
8/16bit時代のティルナノーグってゲームがシナリオコードっての使ってマップやシナリオを自動生成するらしく、
まぁ多分シナリオコードを再現性のある乱数のキーにしてるんだろうと。
2023/01/21(土) 05:00:16.98ID:Q9FQ3lI1d
>>141
結局下位のほうに周期性が現れやすいというのは肯定してるなw
ライブラリのを仕組みもわからずそのまま使うと問題が起きた時に危険なので自前で作ったほうが楽なこともあるんだよ
移植の問題もあるから
2023/01/21(土) 11:13:45.88ID:TvLSyCnz0
理想的な一様乱数であっても
頻度が一様から少し崩れる件については
>>132 でクリアになってる前提で
次に周期等の乱数の素性をああだこうだやってるのでいいんだよね?
2023/01/21(土) 12:57:12.01ID:EJn7glvGM
>>144
線形合同法そのままの下位ビットはランダム性が低いから上位16bitを使うという実装がされてる
これは%で下位ビット使っても何も問題無い
他の乱数(例えばメルセンヌツイスターとか)とかも下位ビット使っても何も問題無い
オマエは何が言いたいんだ?
乱数イコール素の線形合同法と決めつけてんのか?
2023/01/21(土) 22:32:06.91ID:PxhUXXTz0
それより MT を利用したストリーム暗号の実装を探しているんですが、誰か良さげなのを書いていませんかね?
2023/01/21(土) 23:01:28.77ID:5FfejZmpM
暗号の実装なら乱数源よりハッシュ関数の設計の方が重要だと思うけど
2023/01/21(土) 23:09:55.12ID:AnImjWZM0
メルセンヌツイスタは予測はしやすいので暗号に向かないって話じゃなかったっけ?
理論に詳しいわけじゃないけどストリーム暗号だと生成した乱数を
ほとんど順序通り使うことになるので素直に使うと弱い暗号になってまう。
それをカバーする案がどこかで出ているとかいう話なのかな?
2023/01/21(土) 23:25:57.01ID:PxhUXXTz0
>>148-149
生成したMT乱数をハッシュに通して xor マスクに使えば今すぐにでも実装できまますが、馬鹿みたいにコストが高い
もっとお気楽に「暗号論的に安全な」マスクを生成する方法があるはず、と踏んでいます

>>149
生成された暗号列から、暗号生成系内の状態を推測する手段が
*****「ありうる」*****
というだけで、実際に MT において予測しやすいかどうかは、また別の問題かと
2023/01/22(日) 06:45:18.91ID:5LyKSzcv0
メルセンヌツイスタは暗号論的乱数ではないからな
標準の範疇ではrandom_deviceと併用することで暗号論的乱数を作れる

# 俺はrandom_deviceにハメられたことがあって不信感持ってる
2023/01/22(日) 06:57:44.96ID:GyU+xFDzM
ほぼ2の20000乗の長周期の乱数列の出現パターンに対して実用的な有限時間内に値の予測とかできるものなのか?
2023/01/22(日) 09:17:28.62ID:m0kendFMd
初期値を毎回同じにするとかマヌケな実装してなければ大丈夫だが
そういうの意外と多いからな
2023/01/22(日) 11:31:30.58ID:ZNfmIfkb0
>>152
ざっと調べてみた感じだと素朴なメルセンヌツイスタだと 624 個の連続する乱数列があれば内部状態を計算可能ということみたいだね。
2023/01/22(日) 11:55:01.35ID:2NQ69pgqM
擬似乱数は内部状態から数列を計算して外部出力しているのであって、出力された数列の結果だけから内部状態を計算して次回出力を予測するのは難しい
623もの内部変数をすべて確定させようとすれば途方も無いことになると思うけど
2023/01/22(日) 13:27:42.71ID:slZVcCWf0
量子コンピュータならあっという間かもしれん
2023/01/22(日) 14:53:35.01ID:5LyKSzcv0
もしかしてハッシュを復号できると思っている人がいるの?
2023/01/22(日) 17:32:55.31ID:KzI8pxO80
現実で乱数で問題になるのは中周期
短周期は誰が見ててもすぐに欠点がわかる
中周期は人間が見てわかりづらいけど
へたをすると推測されうる

本当に重要な場面では線形合同法は使わないね
2023/01/22(日) 18:43:18.71ID:5nd4WcY/0
>>157
ハッシュを復号?
何意味不明なことを言ってるんだよw
2023/01/22(日) 18:52:07.93ID:Gv0g55llH
15は大した乱数を求めてないだろうし線形合同法で大丈夫でしょ
2023/01/22(日) 19:51:00.57ID:r87X7TULM
少なくともゲーム用途ではもう決定版とも言えるのがPCGだ
これは線形合同法を加工したものだ
大体の用途にはこれだけ知ってれば十分だろ
2023/01/23(月) 07:23:09.72ID:HN6zkKZyd
>>159
返事しやがったwww
2023/01/23(月) 07:36:54.35ID:rT2ytU3d0
>>162
ハッシュ復号で顔真っ赤w
2023/01/23(月) 07:39:15.92ID:HN6zkKZyd
無理ありすぎ
157の発言内容で恥さらしたと思ったの
おまえだけだから
2023/01/23(月) 07:52:21.59ID:rT2ytU3d0
ならハッシュ復号とか言う意味不明な用語を説明してみw
2023/01/23(月) 07:59:00.47ID:OYWoWYjxa
必死やね
2023/01/23(月) 08:34:51.13ID:rT2ytU3d0
>>166
>>164 がなw
2023/01/23(月) 09:53:15.91ID:HN6zkKZyd
昔、ブラックエンジェルスって漫画で
「神父様」というワードで殺人スイッチ入るキャラいたけど
ここには「ハッシュ」で発狂するやつがいるな
2023/01/23(月) 10:00:52.21ID:ZftbX+tS0
発狂なんて表現は、自身が精神科の患者で無ければ口にしない言葉だ
2023/01/23(月) 10:26:46.25ID:e9NCR7zVr
ハッシュ値からハッシュ関数への入力を求めることをハッシュを復号て言ってるのかと、思ったけど違うの?
2023/01/23(月) 11:18:20.16ID:TfCEWCiYM
普通はそれを原像攻撃といいます
2023/01/23(月) 12:07:23.12ID:2WGuD1xXd
>>170
ハッシュドビーフを牛に戻せるか?
2023/01/23(月) 13:04:17.48ID:nA4Uy4AL0
おおよそハッシュ関数って多対1の写像やから 与えられた入力を予測するのは難しいわね
2023/01/23(月) 13:05:15.54ID:rT2ytU3d0
>>170
その意味かどうかもわからんしそもそも>>157が唐突に言い出した意図もわからん
まあ本人もよく理解してないだろうことはわかるけどw
2023/01/23(月) 18:58:27.02ID:ru4XzPDN0
暗号学的ハッシュ関数は暗号学的なだけで暗号ではないわな
まあ、ややこしいのはわかる
2023/01/23(月) 19:37:29.31ID:ZftbX+tS0
現在5chで使っているIDもハッシュ関数使っています
掲示板毎の番号、日付、IPアドレスの組み合わせ32ビットを
16ビットを求めてます
そのため、IDから元のIPアドレスは特定不可能とされてます
2023/01/23(月) 19:39:57.78ID:ZftbX+tS0
組み合わせた32ビットのキーから
16ビットのIDSを求めてます

でした
言葉足りなくて済みません
2023/01/23(月) 19:50:20.64ID:HN6zkKZyd
優しいお兄さんたちがやんわり教えてくれてるぞ
よーく聞いとけなハッシュ君
2023/01/23(月) 20:22:55.39ID:rT2ytU3d0
確認のための>>170とお前以外に復号なんて言ってるアホはいないけどなw
2023/01/23(月) 20:25:01.82ID:HN6zkKZyd
いいからよく聞いとけ
おまえには金取ってもいいくらいの
特別サービスだぞ
2023/01/23(月) 20:28:15.99ID:rP/zs2fBa
上げ足取りの極みやね
伝わるとしても即興の造語は決して許されない
2023/01/23(月) 20:34:11.46ID:rT2ytU3d0
>>180
>>166ww
2023/01/23(月) 22:02:00.33ID:FHYSH6Afr
>>173
ハッシュってできる限り衝突しないようにするけど多対一になるのか?
2023/01/23(月) 22:10:48.44ID:gaP9WTLb0
そうじゃなければ意味無いでしょ
バイト表現をそのままキーにでもするつもりか
2023/01/23(月) 22:18:56.34ID:gaP9WTLb0
大きな空間から小さな空間へぐちゃっと潰す非単射だからhashと呼ばれるんだろうし、むしろ被らなければハッシュ法とは呼べない
2023/01/23(月) 23:25:11.50ID:JEHxFd+10
>>183
あくまでできるかぎり衝突しない努力をしているのであって
絶対に衝突しないことを保証しているわけではない以上
単射にはならんやろ
2023/01/24(火) 00:14:26.83ID:D+LPvIAC0
この掲示板で使ってるIDは、実際に衝突している
32ビットのバリエーションがある対象を16ビットパターンに圧縮する
どの位衝突が発生するか、簡単に計算で出せるだろう
2023/01/24(火) 00:47:30.90ID:Ago7Tr1G0
>>183
元になる情報より小さい空間への写像なんだから当然に衝突することはありうるよ。
確率が均等になるようにデザインされるのが普通だが。

それとハッシュといっても均等でありさえすればよいハッシュテーブルなどに使うハッシュ関数と
意図的に衝突させるのが困難な暗号学的ハッシュ関数は事情が異なる。
2023/01/24(火) 07:19:05.11ID:eIuiRJ7Hd
I/Oのマシン語リストの1行チェックサムだったのが
CRCに進化し、更にCRC32になり・・・
2023/01/24(火) 07:22:48.88ID:hOWV1dmX0
>>189
それは誤り訂正符号であってハッシュじゃない、誤りが少なければ訂正できる、という性質のもの
2023/01/24(火) 07:28:16.15ID:CHY+WBSp0
予測や推論が可能な写像か
2023/01/24(火) 07:38:18.20ID:/rWynzzhM
誤り検出や訂正と予測や推論は違う
巡回符号では予測は出来ない
2023/01/24(火) 07:45:39.55ID:eIuiRJ7Hd
>>190
いや、訂正なんて求めてなかった
あくまで検出さえできれば
点検なり再送なり対応はどうにでもできる
ちまちま訂正を試みて挙げ句不確実とか
バカバカしくて眼中になかった
2023/01/24(火) 08:00:50.17ID:yjc0n37Q0
巡回冗長検査(CRC)
https://ja.wikipedia.org/wiki/%E5%B7%A1%E5%9B%9E%E5%86%97%E9%95%B7%E6%A4%9C%E6%9F%BB

巡回符号
https://ja.wikipedia.org/wiki/%E5%B7%A1%E5%9B%9E%E7%AC%A6%E5%8F%B7
2023/01/24(火) 08:05:18.69ID:iB9B6REv0
元データと誤り訂正符号がセットになってる前提だものね
PGPでいう暗号ではなく署名
2023/01/24(火) 13:20:38.09ID:cMLylpMed
>>15 だが待ちくたびれたニダ
オラの欲しいのは乱数が性器分布してるものなの!
銀杏乱数ではありまへん
さあ、素晴らしいコードを見せてケレ
2023/01/24(火) 18:41:20.06ID:XLjyfoTr0
const char *subarasiikoodo() {retrun "乱数が性器分布してるもの"/*"銀杏乱数"*/;}
2023/01/24(火) 23:29:13.35ID:1YOqlgJ1d
>>196
淫乱とか性器を見せろとかなんなんだね君はいい加減にしたまえ!
2023/01/25(水) 20:45:01.15ID:8z5wZ+1pM
卑猥な言葉に反応する大人を見てはしゃいでいる子供って感じ
2023/01/26(木) 07:05:46.47ID:epYCai+9d
プログラム技術板で猥談にしか参加できないやつpgr
2023/01/26(木) 11:50:43.36ID:xdWnPQo8r
>>185
普通のハッシュが非単射なのはその通りだが、
完全ハッシュというものも一応ある。
2023/01/26(木) 23:06:32.72ID:HOinztZt0
何に使うものなんですか?
2023/01/27(金) 05:48:59.42ID:Ia5Vv5I40
セキュリティがどうでもいい時に
速度を要求されるとき
2023/01/27(金) 08:04:21.64ID:DHOIN7NEM
パスワードなどを暗号化して保存する時ハッシュ値を保存する
他のパスワード値と重複することが無いように完全ハッシュとする
万一衝突すれば他人のパスワードが誤ってすり抜ける可能性が生じる
2023/01/27(金) 09:53:14.54ID:hWSIv7AR0
んなアホな
完全ハッシュの説明はともかく、パスワードに関してはIDとペアで使うんだから他人のパスワードと被ろうがどうだろうが関係がない
そもそもソルト使うんだからuser1とuser2が同じパスワードを使ってもハッシュ値は別になる
2023/01/27(金) 10:07:50.70ID:GgXEpiKGM
いや完全ハッシュの前提が崩れると違うパスワードが同じハッシュ値で衝突して区別できないので破綻する
ソルトは完全ハッシュを担保するための手段
2023/01/27(金) 10:42:53.11ID:MqPTrKVr0
https://en.wikipedia.org/wiki/Perfect_hash_function
> Disadvantages of perfect hash functions are that S needs to be known for the construction of the perfect hash function.

無理やろ
2023/01/27(金) 10:59:53.36ID:WUhobyCY0
暗号学的ハッシュ関数
https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%AD%A6%E7%9A%84%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況