0.1を10回足してみた結果PHPが神と言う事が判明しました

0.1を10回足してみた。

PHPの場合

PHPでの結果、

//——————————————————————————–

JavaScriptの場合

JavaScriptでの結果、 0.9999999999999999
//——————————————————————————–

Python(Ver2.7)の場合

Pythonでの結果、0.9999999999999999

//——————————————————————————–

Rubyの場合

Rubyでの結果、1.0

//——————————————————————————–
Haskellの場合

Haskellでの結果0.9999999999999999

//——————————————————————————–

結論、PHPは神、その次、Ruby

  • Pingback: 0.1を10回足してみた結果PHPが神と言う事が判明しました | WhiteHackerzBlog ハッカー養成学院 公式ブログ | インターネットのネタ帳()

  • フラン

    いやそうなった理由についても説明してくれないと記事として成立しないんだけど

    • さとう

      は?

    • aaa

      以下左辺10進法で右辺2進法
      0.1 = 0.00011001100110011… –(1)
      この循環少数を0.0(0011)とでも表記する ことにする
      (1)2つ足せば  0.1 + 0.1 = 0.0(0110) –(2)
      (2)2つ足せば  0.1 + 0.1 + 0.1 + 0.1 = 0.0(1100) –(3)
      (3)2つ足せば  0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 = 0.1(1001) –(4)
      (2)+(4)から 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 = 0.111111111…
      となって10進法に戻すと0.9999…

      数学的には0.99999…=1なんだが、この場合有限の桁しか扱えないのでどこかで切り捨てられてしまっているんだろうな

    • TOMI

      確かに。
      プログラム言語毎に型の扱い、推論が違うしそんなこと比較しても意味が無い。

      ちなみに 0.999…は1なのでhaskellは正しく処理している。
      http://ja.wikipedia.org/wiki/0.999

      Prelude> :t 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
      0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
      :: Fractional a => a
      Prelude> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
      0.9999999999999999
      Prelude> 1/ 3
      0.3333333333333333
      Prelude> 1/ 3 * 3
      1.0

  • 有効数字的論考によるとRubyがベスト

  • syocy

    興味深い比較でした。
    PHPは分かりませんが、Rubyは表示上1.0になってるだけで内部的には0.99…みたいですね。どうやらプリント時にinspectというのが働いているみたいです。
    # irb
    >> x=0; 10.times { x+=0.1 }; x.floor
    => 0
    >> (0.999999999999999).inspect
    => “0.999999999999999”
    >> (0.9999999999999999).inspect
    => “1.0”

  • たっくん

    浮動小数点を整数に直してしまうPHPはダメだろ。予想しにくい。そういうのは明示的にやってもらいたいもんだ。

  • norifumi

    MacOS 10.7.5 & Ruby1.9.3p0だと「0.9999999999999999」になりました。
    inspectしてもこの桁数だと1.0になりません。32bit OSだと1.0になるのかな?
    深掘りしたいテーマ。

  • Pingback: 【コンピューター】 RSSの時代は終わった!?自分の好みを分析して配信してくれる「Gunosy」が超便利! | TRAVELING 2012年11月01日 深夜便 | aquadrops * news()

  • Thanks for another wonderful article. Where else could anybody get that kind of info in such a perfect method of writing? I have a presentation subsequent week, and I am at the search for such info.