タネ

http://d.hatena.ne.jp/turing_pattern/20080523/1211547863

宣言と実装で引数の順番が違う、ってのはまぁわかると思います。

関数を呼ぶ時にどこ通るかって話で、 x86 では整数の浮動小数もスタックなる場所を通るんだけど、 x86_64 では整数と浮動小数が違う場所を通る。だから順番を変えても正しく動いてしまう。一方 x86 は、順番通りに渡ってしまうので、 1 を float と解釈して、 2.0f を double と解釈して、 3.0 を int として解釈して…ってことが起きて、

irb(main):015:0> [3.0].pack('d').unpack('ii')
=> [0, 1074266112]

というような理由で件の数値が。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h