From: Sam Kong Date: 2007-02-13T04:55:08+09:00 Subject: Re: What's the correct and fast way to determine if a (gig) number is a perfect square? Hi Joel, On Feb 11, 11:37 am, Joel VanderWerf wrote: > Sam Kong wrote: > > Hello, > > > I'm solving a math problem in Ruby. > > I need to determine if a number is a perfect square. > > If the number is small, you may do like the following. > > > def perfect_square? n > > sqrt = n ** 0.5 > > sqrt - sqrt.to_i == 0 > > end > > > But Float number has limitation on precision. > > Thus the function won't work correctly for big numbers like > > (123456789123456789). > > > How would you solve such a case? > > It should be fast as well as correct because I will use it repeatedly. > > Easy: compare integers rather than floats. > > x = 123456789123456789 > > sqrt = Math::sqrt(x) > p(x == sqrt.floor**2) Yes. Your approach is better than mine. But it gives a wrong answer for big numbers like 55833579873437812. > > -- > vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407 Thanks anyway. Sam