From: Aldric Giacomoni <"aldric[removeme]"@...> Date: 2009-04-11T05:10:08+09:00 Subject: Re: Float.finite ? Ah! Understood. Thank you.. Big help :) Stefano Crocco wrote: > Alle Friday 10 April 2009, Aldric Giacomoni ha scritto: >> How does one use .finite? effectively? I tried with (1.0/3).finite? => >> true... I tried with BigDecimal.. Still true. I'm pretty sure these numbers >> aren't finite. How do I make this work? > > According to the ri documentation, Float#finite? only returns false if self is > not inifinite and self.nan? is false. For example, > > (1/0.0).finite? > => false > > What you wanted to know is whether the number has a finite or infinite number > of decimal digits. Unfortunately, I don't think such a method exists. You > can't do that with floats, because all floats have a finite number of decimal > digits (you can't very well store infinite digits in your computer's memory, > after all). I suppose it can be done with the Rational class, but you'd have > to write the method yourself. Here's a simple example of how this could be > done: > > require 'rational' > > class Rational > > def finite_digits? > d = denominator > return false if d % 2 !=0 and d % 5 != 0 > d = d / 2 while d % 2 ==0 > d = d / 5 while d % 5 == 0 > d == 1 > end > > end > > Stefano > -- Aldric Giacomoni
Sometimes one should just look at things and think about things without doing things. -- Calvin