Forum: Ruby newbie question

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Will (Guest)
on 2008-10-08 02:29
(Received via mailing list)
Greetings all, I think this is generally more a programming question
than a
ruby explicit one, however, I am wondering why this code yields 23,
0.999999999999979 instead of 23, 1.

Any help would be great!

i = 0
while i <= 50
  a = 37*i / 50
  c = a + 0.0
  b = (37*i/50.0 - c ) *50
  if b < 1.5 && b > 0.5
    puts i
    puts b
  end
  i = i+1
end


thanks much
Will
Farrel L. (Guest)
on 2008-10-08 02:47
(Received via mailing list)
Rounding errors in floating point arithmetic.

Farrel
Tim H. (Guest)
on 2008-10-08 03:10
(Received via mailing list)
Will wrote:
> Greetings all, I think this is generally more a programming question than a
> ruby explicit one, however, I am wondering why this code yields 23,
> 0.999999999999979 instead of 23, 1.
>

A common question. Check out
http://en.wikipedia.org/wiki/Floating_point.
Todd B. (Guest)
on 2008-10-08 05:10
(Received via mailing list)
On Tue, Oct 7, 2008 at 5:27 PM, Will <removed_email_address@domain.invalid> 
wrote:
>  b = (37*i/50.0 - c ) *50
>  if b < 1.5 && b > 0.5
>    puts i
>    puts b
>  end
>  i = i+1
> end

require 'bigdecimal'

#put a bigdecimal in the numerator or denominator...
((BigDecimal("37") * 23 / 50 - 17) * 50).to_f
#=> 1.0

Todd
This topic is locked and can not be replied to.