[#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:20177] Re: Numeric#step

From: Masahiro TANAKA <masa@...>
Date: 2003-05-07 04:32:11 UTC
List: ruby-dev #20177
At Wed, 7 May 2003 00:02:54 +0900,
Tanaka Akira wrote:
> なんとなく、
> 
> % 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
> % 

誤差の出し方を以下のようにすべきのような気がしてきました。

	const double epsilon = DBL_EPSILON;
	double beg = NUM2DBL(from);
	double end = NUM2DBL(to);
	double unit = NUM2DBL(step);
	double n = (end - beg)/unit;
	double err = (fabs(beg) + fabs(end) + fabs(end-beg)) / fabs(unit) * epsilon;
	long i;

	if (err>0.5) err=0.5;
	n = floor(n + err) + 1;
	for (i=0; i<n; i++) {
	    rb_yield(rb_float_new(i*unit+beg));
	}

田中昌宏

In This Thread