2010-09-01から1ヶ月間の記事一覧

Xorshift の初期化は

いろいろと検証コード書いて試してみた結果、こんな感じで行くことにしました: コード全文: http://ideone.com/RQ4KB struct Xor128 { // ... // 種を元に乱数を初期化する explicit Xor128( int_type seed ) : x(123456789), y(362436069), z(521288629),…

Xorshift の初期値読み飛ばしについて検証してみた。

動機 前回の日記でやった見積りについてご指摘いただいたので、 実際に検証してみます。 検証方法 検証方法としては、単純に、内部状態の各 bit に対し、その bit だけが立った乱数生成器を用意し、 その乱数生成器を状態遷移させていき、その内部状態の変化…

Xorshift アルゴリズムの偏りを除去するのに必要な「読み飛ばし」回数を見積もる

前回の日記で Xorshift アルゴリズムについて書いた時、最後に 「初期化された後にしばらく乱数列を読み飛ばせば偏りは簡単に回避できる」 と書きましたが、では偏りを回避するには、何回くらい読み飛ばせばよいのか、少し考えてみました。 で、それを考える…

Xorshift 乱数生成アルゴリズムを書いてみた。

前回 BarrageLL の乱数について触れたので、今回もその続き。 計算機の応用において、擬似乱数というのは大切です。 なので、世の中には、いろいろな擬似乱数の生成アルゴリズムが存在するわけですが、 今回はその中で比較的新しいアルゴリズム、 xorshift …

東方弾幕風の乱数について

東方弾幕風の乱数生成関数 rand( min, max ) は、 min 以上 max 以下の乱数を返す関数です: let x = rand( 0, 1 )例えばこう書いた場合、 x の値の範囲は 0 一方で、多くのプログラミング言語に用意されている一様な実数乱数の分布は、上端の値を含みません…

東方弾幕風のタスクシステムを Lua で再現する

そろそろ半年ほど前に提唱した BarrageLL の制作を再開していきたいと思います: 東方弾幕風の不満点、およびその解決策 - 野良C++erの雑記帳 弾幕記述フレームワーク BarrageLL 開発開始 - 野良C++erの雑記帳実は最近、ちょこちょこ github で Lua 自体のち…

std::unique_ptr でスコープガード的な何かを作る

お題 当面のスコープガード - Faith and Brave - C++で遊ぼう のスコープガードを std::unique_ptr を使って実装してみる。 std::unique_ptr を使うことで、 release() によるキャンセルが可能になるし、 メモリ確保の回避や静的解析による最適化で、パフォ…

contextually converted to bool

結論から先に言いましょう。 C++0x では、 explicit operator bool を定義すれば、自動的に ! 演算子も使えるようになります: // getchar の戻り値とかで使えそうな何か struct hoge { hoge() : ch_(-1) {} hoge( char ch ) : ch( static_cast<unsigned char>(ch) ) {} exp</unsigned>…

reference collapsing

C++98 では「参照への参照」は作ってはいけないことになっていました: typedef int& ref_t; ref_t& ref = 〜; // 駄目。参照の参照は無理。 これは、基本的には、思わぬミスを防げるので 良い仕様と言えるのですが、 テンプレートを使うときに、思わぬコン…

N3126: 20.8.15 Class template hash の T* に対する特殊化がおかしい

Boost.Flyweight の発表するときの資料として規格を見ていた時に気づいたんですが、 C++0x の Working Draft (N3126) の 20.8.15 Class template hash の項目の、 template <> struct hash<T*>;の部分がおかしいです。 正しくは、 template <class T> struct hash<T*>;となっ</t*></class></t*>…

Boost.勉強会 #2 の発表内容に対する補足とか

この前 Boost.勉強会 #2 で喋ってきたわけですが、 なにせああいった場での発表は初めてだったので、伝えたいことが伝えきれず、 また「口頭で触れたけど、スライドには書いてない」事柄が多かったので、 この場を借りて補足させていただきたいと思います。 …

Boost.勉強会 #2 で喋ってきました。

Boost.FlyweightView more presentations from gintenlabo.Ust: http://www.ustream.tv/recorded/9489637 内容は Boost.Flyweight についてです。 …とか言いつつ大半はconstに関してなのはご愛嬌。 勉強会での発表は初めてだったので拙い点は、どうぞご容赦…

文字列への強制変換

Lua

Lua では数値と文字列は相互に変換可能です。 http://ideone.com/zvnjL print( math.sin("1.0") ) -- OK print( string.byte(0) ) -- OK. "0" の文字コード(ASCIIの場合 48 ) これは通常、細かいことを気にしなくていいので割と便利なわけですが、 type 関…

boost::optional について

以前、 それでも Boost.Optional を使う、大きく分けて2つくらいの理由 - 野良C++erの雑記帳 という記事を書いたのですが、 その中の boost::optional に関して誤りがあったので、訂正したいと思います。 window.twttr = (function(d, s, id) { var js, fjs…

newproxy

Lua

Lua のユーザデータは、基本的に Lua を組み込む側で作るもので、純粋な Lua では使えません。 まぁ無くてもテーブルを使えばいいだけなのですが、テーブルだとオーバースペックだったり、 あるいは rawget/rawset によって破壊されてしまう恐れがあり、少し…