Sorry, I should have mentioned that I am using Inline-Java-0.49
> -----Original Message----- > From: Benjamin Holzman [mailto:[EMAIL PROTECTED] > Sent: Friday, August 12, 2005 9:48 AM > To: inline@perl.org > Cc: [EMAIL PROTECTED] > Subject: Rouding issue in Inline::Java > > I have encountered a rounding problem when sending floating-point numbers > from perl to java using Inline::Java. This is on CentOS 4 on an Intel > pentium 4 with jdk 1.3.10 and perl 5.6.2. We have a math library with > dual implementations; one in perl and one in java, and we have been seeing > sporadic differences. I have tracked the problem down to this: if I take > a number like 0.056200000000000028 in perl and then send it to java using > Inline::Java, java just gets 0.0562, which leads to small differences. I > confirmed that unpack "U*", $x yields the same values (48, 46, 48, 53, 54, > 50) for $x = 0.0562 as well as $x = 0.056200000000000028, indicating that, > at least to perl, there is no difference between these numbers. However, > if $x = "0.056200000000000028", I get 48, 46, 48, 53, 54, 50, 48, 48, 48, > 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 56, as you might expect. If I > hack Inline::Java::Class::CastArgument to sprintf("%0.18f", $arg) when > $proto is 'double', the differences between the perl library and the java > library go away. I find this somewhat confusing, because I would have > thought that on the same machine, perl's (c's) representation of a > floating point number and java's would have agreed. Can anyone shed some > light on what is going on here, and also what the most appropriate remedy > might be? > > Thanks, > > Benjamin Holzman