2006年7月 5日

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

06/07/04 に Sato Hiroshi<hirocy.f01@xxxxx> さんは書きました:
> 今回やりたかったことは,ある規則で単調増加するfloatの配列を
> 生成することでして,その単純なケースを試してみたら丸め誤差が
> 貯まって困ったな,という質問でした.
>
> On Tue, 4 Jul 2006 19:20:18 +0900,
> Sato Hiroshi wrote:
> > 100.times { x << (x[-1] * 10**3).floor * 10**(-3) + 0.001 }

>
> これだとあまりにも泥臭いので,ほとんど同じではあるのですが,
> 最初から十分な桁の整数で配列を作成して,最後にそれを
> collect!でfloatに変える,という方法で解決できました.
> 最善の方法ではないかもですが,ひとまずこれでいけそうです.

もし、そういう数値配列の操作をいろいろするなら
標準添付ではないですが NArray を使ってみるのもよいかも。
http://narray.rubyforge.org/

次の例は 0 から 1 ずつ増える100個の Float からなる配列 x をつくり、
その各要素を 1000 で割ってから、100要素の乱数の配列 r と
要素ごとに足し合わせます。

require "narray"
x, r = NArray.float(100), NArray.float(100)
x.indgen!
x.div!(1000)
r.random!
p x+r


ごとけん

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




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