Ben,

If you try it with print instead of unpack you will get the same result.
I don't think it's an unpack problem.

Patrick

On 8/12/05, Benjamin Holzman <[EMAIL PROTECTED]> wrote:
> Hi Ken!
> 
> The way it works is that it just calls unpack("U*", $arg) and concatenates
> the result with '.', then sends it over a socket to the java server (this is
> why my original post included the results of unpack).  I'm not sure how
> things are reassembled on the java side, but that doesn't really seem to be
> the problem.  After investigating a bit more, I don't think it actually has
> anything to do with stringification:
> 
>   DB<1> x unpack "U*", 0.056200000000000028
> 0  48
> 1  46
> 2  48
> 3  53
> 4  54
> 5  50
> 
>   DB<1> x unpack "U*", 0.056200000000000038
> 0  48
> 1  46
> 2  48
> 3  53
> 4  54
> 5  50
> 
>   DB<1> x unpack "U*", 0.056200000000000048
> 0  48
> 1  46
> 2  48
> 3  53
> 4  54
> 5  50
> 
>   DB<1> x unpack "U*", 0.056200000000000058
> 0  48
> 1  46
> 2  48
> 3  53
> 4  54
> 5  50
> 6  48
> 7  48
> 8  48
> 9  48
> 10  48
> 11  48
> 12  48
> 13  48
> 14  48
> 15  48
> 16  48
> 17  49
> 
> 
> Ben
> 
> -----Original Message-----
> From: Ken Williams [mailto:[EMAIL PROTECTED]
> Sent: Friday, August 12, 2005 3:33 PM
> To: Benjamin Holzman
> Cc: inline@perl.org; [EMAIL PROTECTED]
> Subject: Re: Rouding issue in Inline::Java
> 
> 
> Hi Benjamin,
> 
> When sending to Java, what's the prototype for the method you're
> calling?  If it's a number (float or double or whatever), then I agree,
> it shouldn't be using SvPV, it should use SvNV to get the numerical
> value directly.  I've never looked at the internals of how Inline::Java
> does this, though.
> 
>   -Ken
> 
> On Aug 12, 2005, at 8:48 AM, Benjamin Holzman wrote:
> 
> > 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
> 
> 
> 


-- 
=====================
Patrick LeBoutillier
Laval, Québec, Canada

Reply via email to