[#42503] floatの値がずれる — Sato Hiroshi <hirocy.f01@...>

hirocyと申します.

33 messages 2006/07/04
[#42504] Re: floatの値がずれる — rubikitch <rubikitch@...> 2006/07/04

From: Sato Hiroshi <hirocy.f01@plala.to>

[#42505] Re: floatの値がずれる — Sato Hiroshi <hirocy.f01@...> 2006/07/04

hirocyです.るびきちさん,ありがとうございます.

[#42569] JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Takahiro Kambe <taca@...>

こんばんは。

19 messages 2006/07/11
[#42570] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Yukihiro Matsumoto <matz@...> 2006/07/11

まつもと ゆきひろです

[#42572] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Takahiro Kambe <taca@...> 2006/07/11

In message <1152619872.835566.21152.nullmailer@x31.priv.netlab.jp>

[#42575] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Yukihiro Matsumoto <matz@...> 2006/07/11

まつもと ゆきひろです

[ruby-list:42520] Re: float の値がずれる

From: Tadashi Saito <shiba@...2.accsnet.ne.jp>
Date: 2006-07-05 05:32:29 UTC
List: ruby-list #42520
斎藤と申します。皆さんBigDecimal嫌いなのかな :-(

On Tue, 4 Jul 2006 21:58:45 +0900
Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp> wrote:

> 拡張ライブラリ[RAA:rational]を使って
> 
> require "rational"
> class Float
>   def +(o)
>     (rationalize + o.rationalize).to_f
>   end
> end
> x = [0.0]
> 100.times { x << (x[-1] + 0.001) }
> p x

もちろんいろいろな考えがあるとは思うのですが、「小数は有理数である」
という思考の段階を一段踏まなければならないというのは(とりあえず
自分に取っては)直観に反するような気もします。やはりここはBigDecimalの
出番ではないでしょうか。

さらに実装の都合上、どうがんばってもRationalの方が(下では10倍以上)
遅いです。 Floatの誤差の問題でRationalの利用を推奨する理由はあまりない
ように思うのですが…。逆にメリットがあるなら、教えていただけると幸いです。

$ time ruby -rrational -e 'class Float; def +(o); 
(rationalize + o.rationalize).to_f; end; end
x = [0.0]; 10000.times { x << (x[-1] + 0.001) }'

real    0m1.586s
user    0m1.528s
sys     0m0.024s
$ time ruby -rbigdecimal -e 'x = [BigDecimal("0")]; 
10000.times { x << (x[-1] + BigDecimal("0.001")) }'

real    0m0.127s
user    0m0.085s
sys     0m0.016s

--
斎藤ただし

In This Thread