2006年7月 4日

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

かずひこです。

いつぞやの関西勉強会でこのネタがあがったことがありました。

At Tue, 4 Jul 2006 21:07:41 +0900,
しん wrote:

> 単調増加なのでしたら、加算ではなく、積算という方法もあります。

>
> i=0 ; 100.times{ x << 0.001*i ; i += 1}

Integer.times はブロックパラメータを取れるので

100.times{|i| x << 0.001*i}

と書けます。

また、Numeric#step を使っても積算できますね。こっちの方がちょっとだけ速
いっぽい。

x = []
0.0.step(0.1, 0.001) {|i| x << i}
p x

もしくは、「2進数的に割り切れる値(1.0/2**n)」ずつ増やすと、誤差があり
ません。

x = [0.0]
100.times { x << x[-1] + 1.0/1024 }
p x
--
かずひこ < http://wiki.fdiary.net/kazuhiko/>;
「恋とハックはアジャイルが命!」

投稿者 xml-rpc : 2006年7月 4日 21:26
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/42435
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。