月別アーカイブ: 2013年6月

C++11の新しい乱数の使い方おぼえがき


忘れた頃にふと必要になるので自分用にメモしておきます。

Taken by Matteo.Mazzoni, Flickr

Taken by Matteo.Mazzoni, Flickr

C++11には新しい乱数ライブラリが標準で用意されました。

もちろん従来の乱数rand()も使えますが、内部の実装が決まっていないのと、またその実装について様々な問題点が指摘されていることもあり、C++11ではより新しく使いやすい乱数が定義されたのでした。

これが int rand2(); みたいに定義されていれば使う側としては簡単なのですが、残念ながら使うにはもう少し長い構文が必要になります。

(何も考えず乱数を使いたい人にはかなりマニアックな話題だと思います。C++11の実装の話と乱数の話を行ったり来たりします。)

結論だけ書くと、以下のように乱数myrandを作ることができます。

#include <random>
#include <functional>
#include <ctime>

auto myrand = std::bind(std::uniform_int_distribution<int>(0, 99), std::mt19937(static_cast<unsigned int>(time(nullptr)));

例によってコンパイル時に-std=c++11 オプションをつけて下さい。

続きを読む


[お知らせ]blogのお引越しをします (追記:しました)


このblogページのお引越しをします。

ドメインを変更するだけですので、突然見れなくなったり中身が新規になったりするわけではありません。

今まで来てくださった方にも問題が起きないように注意しますが、変更中は何度か不安定になるかもしれません。よろしくお願いします。

引越しが終わりましたらまた連絡します。


追記: 引越しを完了しました。

旧URLは http://oniku64.dyndns.org/blog/ でしたが、

新URLは http://elephnote.com/blog/ となりました。

旧URLにアクセスしても転送されるので問題はありませんが、永久的にではありませんので、ブックマーク等している方がいましたらお手数ですが変更のほうよろしくお願いします。


現れては議論になるあの確率の問題を愚直にやってみた


今回の話題はこれです。

ジョーカーを除いたトランプ52枚の中から1枚のカードを抜き出し、
表を見ないで箱の中にしまった。
そして、残りのカードをよく切ってから3枚抜き出したところ、
3枚ともダイヤであった。
このとき、箱の中のカードがダイヤである確率はいくらか。
答えが1/4ってのは納得出来ない!
10/49だろ!!

定期的にあちこちで話題になる確率の問題です。

調べると2chまとめサイトなどでも話題にされていますし、考察しているブログなども多数見つかります。
Yahoo!知恵袋では早稲田大学の過去問だという方がいました。

論調もいろいろで、1/4だよ派と10/49だよ派だけに限らず、本文の解釈の仕方で違うだの、この問題は単純な確率の問題ではないだのと様々な意見が出されています。

実際には数学的にきちんと議論できて正解も出せるのですが、それでは納得できない人は大勢います。数式で考えるというのは抽象化のレベルが相当高いので、計算上はともかく問題文を本当に反映できているのか?という疑問が起きるのは不思議なことではありません。

あれこれ議論する前に、実際にやってみればいいんですね。

今回はその結果の話と、結果の「正しさ」の扱いについて少し書いておきます。

続きを読む


「抜き打ちテストのパラドックス」を撃破する


「抜き打ちテストのパラドックス」という有名なパラドックスがあるのですが、たいていどの記事でもパラドックスの紹介だけで終わっていて、もやもやするのでこの記事を書きました。
自分の中ではパラドックスのありかがわかっているつもりなのですが、同意見の主張が見つからないので多少気になっているところでもあります。

ドロステ効果

Taken by fdecomite, Flickr


パラドックスの概要

抜き打ちテストのパラドックスというのは、以下のようなものです。

「とある学校、とあるクラスの話。あるとき先生が以下のように言いました。

『来週の月曜から金曜の間に、抜き打ちテストを行います。ただし、君たちはこの抜き打ちテストがいつ行われるか予測できない。』

続きを読む


最近のブログ記事まとめ


ざっくりとまとめておきます。

詳細は各記事へのリンクをどうぞ。


シミュレーション/ビジュアライゼーション系

[フラクタル] マンデルブロー集合 10の200乗倍への挑戦

コンピュータを駆使してグーゴル倍のさらにグーゴル倍まで拡大。なかなか恐ろしい計算でした。
浮動小数点型の限界なんて何のその。

運動方程式の数値計算と速度ベルレ法の威力 (前半)

ちょっと物理のお話。計算結果がずっと安定するという不思議な数値解法。

[作ってみた] [プログラミング] 剛体3重振り子

剛体系の動きをどうコンピュータの世界に落としこむか、という話。かわいい。

[作ってみた] [プログラミング] 反応拡散方程式で遊ぶ

偏微分方程式と戯れる。単純な式から複雑な模様を描く。ぬるぬる。


その他作ってみた系

男子トイレの力学

モンテカルロ法の授業の課題で作ったもの。

続きを読む


[C++] マルチスレッド/マルチプロセス環境でstd::coutに大人しくしてもらう


C++の小ネタ。マルチスレッド/マルチプロセスで出力が溢れかえるのをなんとかしたかったので作りました。

print文デバッグは実行中の変数の状態を知るのに手軽な方法としてしばしば使いますが、マルチスレッド/マルチプロセスで動く関数をデバッグしていると、スレッド/プロセスの数だけ一気に出力されてしまって大変見づらくなります。

マルチスレッド化の最中など全スレッドの状態を見たい場合もあるのですが、そうでないときはいろいろと混ぜながら出力されてしまうので何がなんだかわからなくなります。

こんなときはif文を使って一応の解決ができます。どこかに出力フラグisOutのようなものがあったとして、

#include

void someThread(bool isOut){
  if(isOut) std::cout << "hogehoge" << std::endl;
}

みたいに書けば一応解決します。しかしいちいちif文まで書くのはどうも面倒だし、そもそも、C++のストリーム関数はいくらでも好きなものを定義できるのが利点だったはずです。

そんなときのために出力するかどうかを選べるようになっていると便利ですね。

というわけで作りました。

続きを読む


院試勉強しながらついTwitterをしてしまうあなたに「院試まで残り何秒bot」作ってみた


お勉強の合間に邪悪なbotを作成。ちょっぴり内輪向けです。

こちらです → @inshi_sister

最近徐々に身の回りで院試勉強をしている人が増えてきています。
お勉強というのは人によっていろいろなスタイルがあります。私は図書館くらいの空気がちょうどいいのですが、人が大勢いる環境で捗る人も意外と多いようです。

そういう方々が集中するために使っているのか、よく見る(煽り合っている?)のが「院試カウントダウンタイマー」やそれに類するカウントダウン系焦らせグッズです。

私がこんなの使いながら勉強したら発狂するんじゃないかと思いますが、まあいろいろな人がいるものです。

一方で図書館などでもよく見るのがTwitterを見ながらのお勉強です。なるほどTwitterというのはひとりで勉強中でも連帯感みたいなものを提供してくれます。一方でこいつはかなりの時間泥棒で、どうやったらTwitterから離れられるか四苦八苦している人も多いようです。

今回はその2つを単純に足して、Twitter上で院試までの残り時間を主張するbotを作ってみました。

続きを読む