PRNG(Pseudo-Random Number Generator)の実装入れ替えを実施しました
具体的な変更内容は、CVS tag before_PRNG_update_20080224から
after_PRNG_update_20080224までの差分を確認してください。
この実装更新により、SADが使用する PRNGは plugin形式で入れ替え可能なものになります。
Defaultでロードされているのは、SAD pluginと呼ばれる旧来の PRNG完全互換の31bit精度の
線形合同法を用いた疑似乱数生成 pluginです。
標準外の疑似乱数生成 pluginの実装としては、extensions/RandomMT/Plugins/で提供されている
MT19937と SFMT pluginが存在します。
SSE2等を使った最適化を行った場合、32bit精度での SFMT pluginは 2^19937-1という極めて長い
周期長で SAD pluginとほぼ同等の速度を達成しており、必要であれば 53bit精度の乱数も提供可能です
# 幾つかの環境で測定された疑似乱数生成速度のベンチマーク
# URI: http://jyurai.ddo.jp/~amorita/SAD/?Benchmark
この更新による主だった仕様の追加および変更点は下記の通りです
o SEED変数の廃止(変数自体は残りますが、もはや動作に影響を与えません)
o Random[]関数ファミリーの実装入れかえ
* 追加関数
ListRandom[] 使用可能な PRNG pluginのリストを返す
ParabolaRandom[] 区間(-1,1)の放物線分布乱数(*)
UniformRandom[] 区間(0,1)の均一分布乱数(*)
UniformRandom0[] 区間[0,1)の均一分布乱数(Random[]の別名)
UniformRandom1[] 区間(0,1]の均一分布乱数(*)
UniformRandom01[] 区間[0,1]の均一分布乱数(*)
(*)は、PRNG pluginでのサポートは必須ではない
* 仕様変更
SeedRandom[] 返り値が、現在の PRNG plguin選択状態と
選択中の PRNG pluginの内部状態を含む
List型に変更される(旧仕様は、Real型)
ただし、SeedRandom[]の戻り値(*)を保存し、再び
SeedRandom[]の引数に与えた際に戻り値(*)を
返した状態へ復帰する点は変化なし
String型を引数とした PRNG pluginの選択機能を追加
List型を渡しての内部状態の初期化機能を追加
FIXSEEDフラグ 保存されるのは、PRNG pluginの選択状態と保存時に
選択中だった PRNG pluginの内部状態だけです
PUSHS_EED/POPS_EED/EXCGS_EED/PEEKS_EED FFSコマンド
保存されるのは、PRNG pluginの選択状態と保存時に
選択中だった PRNG pluginの内部状態だけです