2007-08-01から1ヶ月間の記事一覧
D言語は、本来C++の代替と捉えるべきと思うが、 ここではPerlのように書けるがずっと高速な言語と位置づけて、 Perlで書いたプログラムをD言語で書いてみる。 Perlもたまに遅いと感じることがあるので、 それをDで書き直してみたいというのはあるが、 実際に…
本当に、進むマス数の平均の逆数に、 そのマスに止まる確率が収束するのだろうか。 一度にnマス進む確率をqnとする。 一度に進める最大のマス数をNとすると、 q1 + ... + qN = 1 m = q1 + ... + NqN nマス目に止まる確率は、 ここで、pn = 0 (n これより、 …
サイコロ1個のときと同じように、pnの収束する値を求める。 収束性は、同様に考えて問題ない。 より、 とおくと、 だから、a13を計算すればよい。 前回計算したp2 〜 p13を用いて、 a13を実際にプログラムを用いて計算すると、 a13 = 36 となった。 よって、…
漸化式で確率を求める。 p0 = 1 p1 = 0 として、 これをプログラムを書いて求めればいいが、どうしても数値誤差が出る。 しかし、割り算は36で割っているだけなので、36進数なら誤差は出ない。 ここは、表記しやすい6進数を使おう。 そうすると、 p[2] = 0.0…
サイコロを2つ振ることにする。 確率が収束するのは同じように証明できる。 シミュレーションの結果だと、1/7に収束するっぽい。 p[2] = 0.027998 p[3] = 0.055439 p[4] = 0.083897 p[5] = 0.114852 p[6] = 0.146368 p[7] = 0.182016 p[8] = 0.166205 p[9] =…
前回、pnが収束する値を求めたが、 もちろん収束することを証明しなければならない。 わかりやすくするために、 an = pn - 2 / 7 とおいて、anが0に収束することを示す。 実際に値をプロットしてみる。anの絶対値をプロットしている。 ただし、赤は正、青は…
pnが収束する値を求める。 まず、 p1 = 1 / 6 p2 = 1 / 6 + 1 / 36 = 7 / 36 nが6以下のとき、 pn = pn-1 + pn-1 / 6 = 7 / 6 * pn-1 だから、 nが6より大きいとき、 より、 再帰的に、 が成り立つ。 右辺を具体的に計算すると6になるから、 pn は p に収束…
漸化式で確率を求める。 nマス先に止まる確率をpnとする。 p0 = 1とする。 まず、次のマスに止まる確率は、サイコロを振って1の目が出る確率だから、 p1 = 1 / 6 n = 2のときは、 2の目が出る確率+1の目が出てそのあと1つ先に止まる確率だから、 p2 = 1 / 6…
すごろくのあがりにピタリと止まる確率を求める。 例えば、あがりの1つ前のマスなら、サイコロを振って1が出なければならないので、確率は1/6となる。2つ前ならそれよりは大きくなる。 50マス前からサイコロを振って、止まったマスを記録し、100万回繰り返し…
iteratorのincrement こう書くと、iteratorのincrementの速度を純粋に比較できる。 void procVector() { vector v; for(int k = 0; k v.push_back(k); int a = 0; typedef vector::const_iterator CIT; for(int i = 0; i for(CIT p = v.begin(); p != v.end(…
Visual Studio.net2003(VS)で、引数の指定のところにコマンドプロンプトでするようにリダイレクトの指定をすると、ちゃんとリダイレクトしてくれる。 私はいつも、標準エラー出力をリダイレクトするようにしている。 調べた限りだと意外と知られていない技…