アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
random関数 (スコア:3, 興味深い)
Cのrandom関数はあまり精度がよくないと聞きますが、
標準のrandom関数を使うのではなく
例えば mersenne twister を使うと実行速度が変わったりするのでしょうか?
mersenne twister の乱数生成速度が影響して
逆に遅くなったりするかもしれませんが、
単純に乱数生成速度が無視できたらどうなんでしょうね。
Re:random関数 (スコア:0)
ここでいう精度とは何ですか?
> mersenne twister の乱数生成速度が影響して
> 逆に遅くなったりするかもしれませんが、
RNGとしてMTを採用することで遅くなることを危惧するのは
どういう根拠からくるものなのでしょうか?
速度の速さと周期の長さを特徴とするアルゴリズムのはずですが。
Re:random関数 (スコア:0)
MTは他のそれなりに質が高いとされるRNGと比べて高速というわけであって,
質が低いと分類される線形合同法と比べればMTは遅いでしょう.
Re:random関数 (スコア:1, 興味深い)
それはなぜですか?
乗算を使わず高速化を図っているMTが
乗算を含んでしまう線形合同法よりさも当り前のように
遅くなってしまうと言い切る理由が全く分かりません。
#ためしに簡単なベンチマークコードを作ってgccでコンパイルして
#P4上で走らせてみたところglibcのrandやrandomよりMTの方が速かった。約5倍速。
#これでmd5coll.cの高速化の手が見えた?
Re:random関数 (スコア:3, 興味深い)
問題の glibc の rand() は、初期化済みかどうかのチェックやら lock/unlock やらいろいろと複雑なことをやっているので遅くなっているようです。
Re:random関数 (スコア:1, 興味深い)
単純な線形合同法ではなくrandomの代用となれるだけの
周期を延長させた線形合同法にて比較しないと前提が崩れますよ。
今回の衝突目的として使い物にならない短周期疑似乱数を
代用品として提示しても規格外ですから。
もし要求仕様を満たさないものも比較対象にできるなら
「int rand(){static int a=1;return a+=1;}の方が速い」と言えます。
しかしそれでは衝突を見つけ出す目的として使えないので使えません。
同様に、単純な線形合同法による特定の実装が短周期であり
衝突を見つけ出すことができないならば、それもa+=1と同じようなものです。
Re:random関数 (スコア:0)
> 周期を延長させた線形合同法にて比較しないと前提が崩れますよ。
#834198 への回答なんだから問題なかろう.
Re:random関数 (スコア:0)
それも最後に
>#これでmd5coll.cの高速化の手が見えた?
と書いてあるから、その「高速」が何を前提にしてるのか
って考えるのは大事だと思うのですが。