最良近似分数の系列を生成する Enumerator
オブジェクトの生成
residue : When::Coordinates::Residue
options : Hash
:error => Numeric
収束とみなす誤差
:count_limit => Integer
最大繰り返し回数
# File when/coordinates.rb, line 407
407: def initialize(*args)
408: residue = args[0]
409: @x = residue.divisor * residue.carry + residue.remainder
410: @y = residue.divisor
411: super
412: @error = @options[:error]
413: @count_limit = @options[:count_limit]
414: end
最良近似分数を生成する
returns : [remainder, divisor, error]
remainder : Integer
分子
divisor : Integer
分母
error : Float
誤差(系列は無限につづくので、使用する側で終了判定が必要)
# File when/coordinates.rb, line 380
380: def succ
381: value = @current
382: if (@z==@k) ||
383: (@count_limit.kind_of?(Numeric) && @count >= @count_limit) ||
384: (@error.kind_of?(Numeric) && @e && @error >= @e.abs)
385: @current = nil
386: else
387: @z = 1.0/(@z-@k)
388: @k = @z.floor
389: @e = @p[1].to_f/@q[1]-@x.to_f/@y
390: @current = [@p[1], @q[1], @e]
391: @p = [@p[1], @p[1]*@k + @p[0]]
392: @q = [@q[1], @q[1]*@k + @q[0]]
393: @count += 1
394: end
395: return value
396: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.