[#49788] lambdaとかprocとか使ったプログラム — 牛坂 博則 <ushizaka.hironori@...>
そもそも本当に必要なのでしょうか。それを使うと何が良いのかもわかりませ
6 messages
2014/04/11
[#49796] Range class? — "Masa" <imagine@...>
坂野正明です。
5 messages
2014/04/20
[#49804] Re: 小数点以下の表示で質問があります。 — Fumiaki Sakamoto <ght8270407fs@...>
自己レスですみません。
14 messages
2014/04/23
[#49805] Re: 小数点以下の表示で質問があります。
— "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
2014/04/23
きしもとです
[#49806] Re: 小数点以下の表示で質問があります。
— Fumiaki Sakamoto <ght8270407fs@...>
2014/04/23
きしもとさま
[#49808] Re: 小数点以下の表示で質問があります。
— Tetsuo Sakaguchi <saka@...>
2014/04/23
阪口です。
[#49809] Re: 小数点以下の表示で質問があります。
— Fumiaki Sakamoto <ght8270407fs@...>
2014/04/23
ありがとうございます。
[ruby-list:49819] Re: 小数点以下の表示で質問があります。
From:
dezawa <dezawa@...>
Date:
2014-04-24 12:13:06 UTC
List:
ruby-list #49819
出沢です
この話ですが、
「小数点以下の十進数を二進数で表すと誤差が出る」
と言うこととは違う点で興味を持ちました。
Float#to_s と "%18.16f"%float では結果が違う!
それとも、rubyのfloatでは .16fは出しすぎ?
試しに、計算結果としてではなく、数値リテラルで試してみました。
(1.9.3のirb)
[0.9999990000000001,0.9999999000000001,0.9999999900000001].
each{|f| puts "%18.16f"%f}
0.9999990000000001
0.9999999000000001
0.9999999900000001
=> [0.9999990000000001, 0.9999999, 0.9999999900000001]
ということで、numeric.cのflo_to_s と spritf の case 'f' を
ざっとみてみたのですが、残念ながら3分ぐらいでは理解できません
でした。
ふと、ruby1.8.7のirbで試してみると
0.9999990000000001
0.9999999000000001
0.9999999900000001
=> [0.999999, 0.9999999, 0.99999999]
to_sの結果が異なります。
diff -u {ruby-1.8.7-p358,ruby-2.0.0-p353}/numeric.c|less
してみましたら、
ruby1.8.7 では Cの sprintf で変換してますが、2.0.0 では
sprintfは使って居ませんでした。
質問
ruby2 では sprintf を使わなくなったのは何か理由があるのでしょうか?
蛇足
53log2 = 15.95
やはり Float(実態はCのdouble?) では16桁出すのは微妙に多すぎ?
だから、1.8.7のto_sでは .16g ではなく .15g で変換してるのか?