SourceChordスマートフォン用の表示で見るSourceChordC#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。2008-04-22乱数生成について・・xorshiftすげぇプログラムモンテカルロ法で計算するときには、乱数の質についての話題がよく出てきます。乱数に偏りがあると、正確な推定ができなくなるためです。C言語標準のrand関数はあまり乱数の質が良くなくて、サンプリングする方向に偏りができてしまうとのことです。そこで、別の乱数生成法を用いるのですが、レンダラ関係ではメルセンヌツイスタがよく用いられています。今回はコチラ↓の記事で見かけたxorshift法というのを試してみました。http://lucille.atso-net.jp/wiki/index.php?%CD%F0%BF%F4xorshift法はxorとシフト演算のみで超高速に疑似乱数を生成するものです。パストレなどでは、ロシアンルーレットで反射方向を決める際など、多くの場所で乱数を生成する必要があります。xorshiftを用いることで高速化ができないかな、と思いxorshiftがどの程度早いのか実際に試してみました。(まだレンダラに組み込んではいませんが・・)ちなみにxorshiftによる乱数生成ルーチンはたったコレだけ。);}このルーチンとC言語標準のrand関数それぞれで、1億回乱数を生成する時間を比較してみました。最初、デバッグモードで比較したところ、rand関数の方が速くてアレ??と思ったのですが、xorshift法はリリースモードにすると一気に速くなります。xorとシフト演算は最適化がうまく働くってことなのかな。一応、randとxorshiftそれぞれでロシアンルーレットを作って三次元空間にプロットして比較してみました。周囲角と仰角を乱数で生成して、球座標から直行座標に直した座標を10000点プロットしました。見た感じだと、xorshiftで生成しても問題なさそうなので、今度レンダラに組み込んでみようと思います。今回もOpenCvSharpネタ。今度はちょっと脱線気味。アプリ開発Windows開発者はてなブログをはじめよう!minami_SCさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。