Hi Rob-

Thanks for the reports.  This did not occur for
PDL-2.013 because the logic for 64bit index support
was not complete.  What I think is happening is
that perl values are being converted in the
typemap which assumes that PDL_Double is capable
of representing any floating point type.

For the case of long double -> double conversion,
this is not the case.  I don't think we want to
try to add long double to the PDL-2.x types but
we do need to decide how to handle the conversion
process and possible loss of precision or range.

--Chris

On 9/30/2015 04:23, [email protected] wrote:
> -----Original Message----- From: [email protected]
> Sent: Wednesday, September 30, 2015 11:28 AM
> To: Chris Marshall ; perldl
> Subject: Re: [Pdl-general] CHM/PDL-2.013_01.tar.gz uploaded to CPAN
>
>> There's also problems with my long double builds of perl on Windows.
>
> No problems when nvtype is "double".
>
> 45 of the test scripts are failing because whichdatatype_double(), 
> which is found in Basic/Core/pdlcore.c, croaks when called with an 
> argument whose finite floating point decimal value cannot be expressed 
> exactly in base 2.:
>
> Something's gone wrong: 0.000000 cannot be converted by 
> whichdatatype_double at C:\sisyphusion\PDL-2.013_01\blib\lib/PDL/
>
> (The arg is not zero - it's just that "%lf" does not display the 
> correct value.)
>
> whichdatatype_double looks like:
>
> ##########################
> int pdl_whichdatatype_double (NV nv) {
>        TESTTYPE(PDL_F,PDL_Float)
>        TESTTYPE(PDL_D,PDL_Double)
>
>        if( !finite(nv) ) { return PDL_D; }
>        croak("Something's gone wrong: %lf cannot be converted by 
> whichdatatype_double",
>                nv);
> }
> ##########################
>
> where TESTTYPE is defined as:
> #define TESTTYPE(b,a) {a foo = nv; if(nv == foo) return b;}
>
> Given that PDL_Float is 4 bytes, PDL_Double is 8 bytes and NV is 16 
> bytes, it should come as no surprise that TESTTYPE should fail to 
> return for any finite floating point decimal value that cannot be 
> expressed exactly in base 2.
>
> However, the reason that 2.013 succeeds for nvtype='long double' is 
> that whichdatatype_double() simply does NOT get called at any stage 
> (during the running of its test suite, at least) .
>
> So ... the question becomes "Why does the PDL-2.013_01 test suite call 
> whichdatatype_double() at least 45 times when the nvtype is 'long 
> double' ?"
>
> This is not a Windows-only issue. There aren't many cpan-testers 
> running -Duselongdouble builds, but there's a report from one at:
> http://www.cpantesters.org/cpan/report/3b328b0e-66d3-11e5-a1a3-e32696b0373b 
>
> and the same thing is happening there.
>
> Cheers,
> Rob


------------------------------------------------------------------------------
_______________________________________________
pdl-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pdl-general

Reply via email to