[#20227] dyna_vars problem? — Tanaka Akira <akr@...17n.org>

しばらく前から、稀に Ruby が core を吐くという問題を追いかけているので

15 messages 2003/05/19
[#20234] Re: dyna_vars problem? — matz@... (Yukihiro Matsumoto) 2003/05/19

まつもと ゆきひろです

[#20236] Re: dyna_vars problem? — Tanaka Akira <akr@...17n.org> 2003/05/19

In article <1053363181.529491.30320.nullmailer@picachu.netlab.jp>,

[ruby-dev:20175] Re: Numeric#step

From: matz@... (Yukihiro Matsumoto)
Date: 2003-05-06 16:40:27 UTC
List: ruby-dev #20175
まつもと ゆきひろです

In message "[ruby-dev:20174] Re: Numeric#step"
    on 03/05/07, Tanaka Akira <akr@m17n.org> writes:

|% ruby -ve '1.1.step(1.4, 0.1) {|n| printf("%.20f\n", n) }'
|ruby 1.8.0 (2003-05-06) [i686-linux]
|1.10000000000000008882
|1.20000000000000017764
|1.30000000000000004441
|% 
|
|とか、一般には、
|
|% ruby -e '
|n = 0
|loop {
|  e = n / 10.0
|  0.upto(n) {|j|
|    b = j / 10.0
|    k = nil
|    b.step(e, 0.1) {|k|}
|    printf "%.20f %.20f %.20f\n",b,e,k if (e - k).abs > 0.001
|  }
|  n += 1
|}
|'
|1.10000000000000008882 1.19999999999999995559 1.10000000000000008882
|1.10000000000000008882 1.39999999999999991118 1.30000000000000004441
|1.30000000000000004441 1.39999999999999991118 1.30000000000000004441
|1.60000000000000008882 1.69999999999999995559 1.60000000000000008882
|1.60000000000000008882 1.89999999999999991118 1.80000000000000004441
|1.80000000000000004441 1.89999999999999991118 1.80000000000000004441
|1.80000000000000004441 2.29999999999999982236 2.20000000000000017764
|2.00000000000000000000 2.29999999999999982236 2.20000000000000017764
|2.10000000000000008882 2.29999999999999982236 2.20000000000000017764
|2.20000000000000017764 2.29999999999999982236 2.20000000000000017764
|...
|
|だとか。
|
|epsilon を増やしていくと症状が起きる下限が大きくなっていくので、誤差が
|定数で抑えられていないところを epsilon という定数と見積もっている気が
|しますね。

今の作りならepsilonを使う必要はなくて、マージンとして0.5とか
加えても動きますよね。しかもその方が「正しい」動作をするし。
そうしちゃおう。

In This Thread