第十回 #渋谷java http://shibuya-java.connpass.com/event/11574/ での発表資料です。Java で乱数生成するときのお話をしました。
こちらの記事はJavaで毎回完全に異なる乱数を取得する方法 | Think Twiceに移設しました。 >
メルセンヌツイスタのJava実装いろいろあるけど、どれが一番速いの?ということで比較実験をしてみた。 ECJライブラリの高速化バージョン(MersenneTwisterFast) mantissaライブラリ Coltライブラリ David Beaumont氏による実装 10の9乗個の乱数を生成し合計を加算に要した時間を計測。実験環境はPen3の1G+メモリ256M+WinXP+JRE1.4.2。 結果。 java.util.Random(比較用): 7.351sec ECJ: 6.509sec mantissa: 7.180sec Colt: 6.960sec David Beaumont: 8.702sec 一番速かったのはECJの高速化バージョン実装。何をしているのかとソースコードを覗いてみると、標準のRandomを継承せず、非同期でマルチスレッド対応せず、さらに共通ルーチンを関数コー
2009年1月31日に64 bit Ubuntu を導入したので、 64 bit gcc での動作確認、性能評価、チューニングの作業をしました。 新しく開発しました(64 bit 非対応) jump.c.html : Xorshift で戻ったり一瞬で相対ジャンプできるプログラム 浮動小数点数に特化した乱数ライブラリ(SSE2対応) zdsfmt.zip : ライブラリ本体一式 libZD.zip : エクセルのためのダイナミック・リンク・ライブラリ(DLL)一式 32ビット整数の生成は他のに比べ少し遅くなりますが、浮動小数点数の生成はかなり高速です。 元のメルセンヌ・ツイスタを使った乱数ライブラリ(SSE3対応) zmtrand.zip : ライブラリ本体一式 libZMT.zip : エクセルのためのダイナミック・リンク・ライブラリ(DLL)一式 マクロ HAVE_SSE3 を定義して
最近、乱数について興味があって、いろいろ調べてたら、java.util.Randomはひとつめの値が乱数としては使い物にならないくらい偏りがあるらしい。 試しにこんなプログラムを書いてみます。 public class RandomRange { public static void main(String[] args){ Random r = new Random(); double min = Double.MAX_VALUE; double max = Double.MIN_VALUE; for(int i = 0; i < 1000; ++i){ r.setSeed(i); double x = r.nextDouble(); if(x > max) max = x; if(x < min) min = x; } System.out.printf("min=%.4f max=%
ちょっと前に「Javaで乱数を生成する」というタイトルで、Javaで疑似乱数を生成する方法について書いてきた。 Javaで乱数を生成する(1) : 疑似乱数生成器の動作概要 Javaで乱数を生成する(2) : JavaのAPIの紹介 Javaで乱数を生成する(3) : Tomcatのソースを読む準備 Javaで乱数を生成する(4) : Tomcatでの実装方法 予測困難な疑似乱数を得るためには、疑似乱数生成器を用いるにせよ、何らかのノイズ(エントロピ)が必要となることがわかった*1。正直、面倒。疑似乱数を生成しなくて済むならば、是非そうしたい。Webアプリケーションであれば、アプリケーションサーバやフレームワークが(きっと推測困難な)セッションIDを発行しているので、それを用いればよい。下手に自作しない方がよい。 セッションIDを用いれば(そのまま、あるいは加工して用いれば)よい例としては
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く