From: Kazuhiko Date: 2006-07-04T21:26:15+09:00 Subject: [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 -- かずひこ 「恋とハックはアジャイルが命!」