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));
	}

田中昌宏