C言語なら俺に聞け 144

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 838a-3nWA)
垢版 |
2017/12/23(土) 19:33:43.89ID:dghfoRy20
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.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/


http://mevius.5ch.net/test/read.cgi/tech/1509107288/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2デフォルトの名無しさん (ワッチョイ 639f-buzn)
垢版 |
2017/12/23(土) 22:25:14.39ID:BUr3nOOf0
#include <stdio.h>

int main(int argc, char *argv[])
{
unsigned long long n[] = { 0x0820084008411c3e, 0x087f180408080810 };
int i;

for (i = 127; i >= 0; i--) {
putchar(n[i / 64] & (1ULL << (i % 64)) ? '*' : ' ');
if (! (i & 0x0f)) putchar('\n');
}

return 0;
}

https://paiza.io/projects/zyQ0Osccs4xaziOrVUF_cA
2017/12/24(日) 01:31:12.56ID:WikwUycQ0
乱数生成法について教えてください。
普通の乱数生成法は、ある乱数 x を発生させたとき、次の乱数を特定の関数 f で生成させていますが、
(すなわち、次の乱数は f(x) となる)、これは n + 1 番目の乱数を作るには、n 番目の乱数を知らなければならないことになります。

そうではなくて、n + 1 番目の乱数を f(n + 1) で計算できるもの( n + 1 番目の乱数を求めるのに n 番目の乱数を知らなくてもいいもの)はないでしょうか?
こういう乱数はテクニカルタームとしてはどのように呼ばれるのでしょうか?
2017/12/24(日) 02:41:31.08ID:rYvbui2B0
>>3
擬似乱数のことでいいんだよね?
今普通って言ったらメルセンヌツイスターだと思うんだけど、
「次の乱数は f(x)」 とか「f(n + 1) で計算」とかしないよ
数千bitほどの内部状態から数列を生み出すんだよ
じゃないと周期とか質が悪い
2017/12/24(日) 03:04:56.70ID:NhYt16sn0
f(n + 1) で計算できるものって それはもはやHashではないかな
2017/12/24(日) 09:27:22.23ID:ZACWf2Ud0
適当に名づけるなら帰納的乱数とかになる
2017/12/24(日) 09:52:22.24ID:RXtl733r0
>(すなわち、次の乱数は f(x) となる)、これは n + 1 番目の乱数を作るには、n 番目の乱数を知らなければならないことになります。

それランダムにならんように思うが。
2017/12/24(日) 10:37:54.51ID:hPGGl0Vf0
神はサイコロを振らない
2017/12/24(日) 12:15:24.33ID:k/FD7rQX0
そうなんだおじさん「そうなんだ」
2017/12/24(日) 13:04:44.76ID:88m+Wv2j0
>>4
乱数を取得するごとに内部状態が変わるので前回と違う値が取れんだと思うんだが
メルセンヌツイスタはシードが同じでも別の乱数列が出力される?
11デフォルトの名無しさん (ワッチョイ 639f-buzn)
垢版 |
2017/12/24(日) 13:57:11.07ID:7ASFTRv40
>>3
普通の計算機である以上何かを元にして計算するしかないのでは?
f(n+1) を計算する時に f(n) を使わずに n を元にして計算する?
だったら乱数計算する前に必ずシードをセットするようにするしかないのではないか?
例えば rand() の直前に必ず srand() で種をセットするということね。
(実際これやると乱数にならないような気がするが)
2017/12/24(日) 16:54:26.09ID:rYvbui2B0
>>10
??
当然、初期状態が同じなら出力も同じだよ
2017/12/24(日) 17:37:32.76ID:FUOJ/cJEM
>>12
メルセンヌツイスタは乱数列を無限に出力できるのでn番目とかはないという話ですか?
2017/12/24(日) 17:37:51.83ID:DT7VHm750
>>3 の質問の真意は
「(擬似)乱数列のn+1番目の値を出すためにn+1回のループを回す必要がない
アルゴリズムを紹介してくれ」だと思うよ。

n+1番目の乱数値を作るためにn番目までの乱数値を知る(次の値の計算に使う)
必要がある、という意味ではないでしょ。
2017/12/24(日) 17:43:11.44ID:DT7VHm750
おっと、「〜だと思うよ」の部分は「〜じゃないかな?」に訂正させてくれ。
読み直したら、そこまで断定する自信がなくなった。

質問者 >>3 による見解を求む。
…と言っても、いずれにせよ俺には答えられない問題だけどネ。
2017/12/24(日) 17:57:57.47ID:KMicyDdr0
Gtk+ 3.0のGUIツールの質問はこちらでも宜しいでしょうか。
glade3.18、C言語を使用しています。

起動したgladeの右側のプロパティ画面で、

window1 GtkWindow
□|__box1 GtkBox
□□|__scrolledwindow1 GtkScrolledWindow
□□□|__viewport1 GtkViewport
□□□|____image2 GtkImage
□□□|__button1 GtkButton

のように配置すると、画面をマウスで引き伸ばしても、実行時window1のみが引き伸ばされてしまいます。
やろうとしている事は、ファイルの保存ダイアログの様に、マウスで引き伸ばしてもbutton1がwindow1と一緒に移動し、image2が引き伸ばしされている様に見せたいのですが上手くいきません。
教えてください。よろしくお願いします。
2017/12/24(日) 18:24:06.76ID:rYvbui2B0
>>13
当然、特定初期状態からのn番目はあるよ
周期もある

何を聞かれてるのかよくわからない
2017/12/24(日) 18:47:45.17ID:WikwUycQ0
>>14
はい、そのとおりです。
ハッシュ関数(たとえばSHA-2) に対して入力0, 1, 2, を与えて得られた出力を乱数として使用することに妥当性はあるか?

もっと踏み込むと、実はストリーム暗号として使用したく考えています。
ハッシュ関数を h(x)、
暗号鍵を k
平文を M
暗号文をC
として、
C = Mi xor f(n + k), n = 0, 1, 2, ....
とした場合に、この暗号に対してどのような解読方法が考えられるか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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