雑記帳

ちょっとした文章とかメモ書きとか。

Rubyでxorshift128を実装してみた

あ、はい。

これ完全にmikutterプラグイン作成で生まれた実装です。

Rubyにもシフト演算子があるのでオブジェクトに気をつけて書けば移植できます。
あと、変数宣言時に型の情報がいらないので宣言の方法も工夫する必要があります。

てな訳で書いてみた

以下実装:

def xorshift128
  x = 123456789; y = 362436069; z = 521288629; w = 88675123
  t = 0
  x = Time.now.to_i
  t = x ^ (x << 11)
  x = y; y = z; z = w
  w = (w ^ (w >> 19)) ^ (t ^ (t >> 8))
 return w
end

となりました。

注意すべき点は乱数のシードに用いるTime.nowがTimeオブジェクトなのでそれをIntegerに変換する点(.to_i)ですね。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。