Hello

I'm reading Java class files using ruby and found some problems when
handling float values. The numbers are stored using IEEE 754 format.
After several hours trying and thinking I might be using unpack the
wrong way, I've wrote the following code which packs a Float and then
immediately unpacks it. And the result is different from the original
value.

------------
a = 0.1234567
b = [a].pack('g').unpack('g')[0]

puts "#{a} =? #{b} => #{a == b}"
------------

outputs:

0.1234567 =? 0.123456701636314 => false

I came accross this doc, which states that in Perl this happens too
(http://perldoc.perl.org/functions/pack.html) "Note that Perl uses
doubles internally for all numeric calculation, and converting from
double into float and thence back to double again will lose precision
(i.e., unpack("f", pack("f", $foo)) will not in general equal $foo)."
Maybe Ruby is doing the same Perl does?



Any help will be appreciated

Thanks


-- 
Luis Parravicini
http://ktulu.com.ar/blog/