タネ
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]
というような理由で件の数値が。