Thanks, Chris. I understand this now and will be more aware of type
conversions in the future. Still, personally, I see this as an unexpected
and potentially confusing thing.

Best regards,
Marek

On Thu, 18 Jun 2015 at 11:34 Chris Marshall <devel.chm...@gmail.com> wrote:

>  Thanks for the additional report.
>
> The results reflect the typemap for conversions from perl scalars
> to PDL types which tries to avoid unnecessary type promotions
> (if you start with a byte value, you probably don't want the result
> as a 64bit int at the end).  PDL used to use doubles as the catch
> all type.  That doesn't work for 64bit integers since they are not
> representable as double (ieee with only a 52bit mantissa).
>
>   floor(1.3)->floor(double) since 1.3 is not exact in float or int
>   floor(1)->floor(byte) since 1 is an int < 256
>   floor(1.0)->floor(float) since 1.0 is double or float and 1.0 is exact
> as float
>
> NOTE:  This is an explanation for what you have reported not a defense.
>
> Thanks for the investigations,
> Chris
>
>
> On 6/18/2015 03:59, Marek Gierliński wrote:
>
> Recently I have reported problems with using results of stats() as
> scalars. Today I found that another of my scripts, that used to work in
> older PDL versions, is failing. The problem is very similar, using
> one-element piddles in scalar context gives almost random results. Here it
> is:
>
>  pdl> $x = floor(1.3)
> pdl> p $x
>  1
> pdl> $x += 0.1
> pdl> p $x
>  1.1
>
>  pdl> $x = floor(1)
>  pdl> p $x
>  1
> pdl> $x += 0.1
> pdl> p $x
>  1
>
>  when taking floor() of an integer number, I cannot increment it
> afterwards. No problems when I take floor() of a non-integer. I think in
> this particular case the problem is with the type:
>
>  pdl> $x = floor(1.1); p $x->info
> PDL: Double D []
> pdl> $x = floor(1); p $x->info
> PDL: Byte D []
>
>  Suddenly, the type is changed and I suppose 'Byte' doesn't take +=0.1.
> This is a bit random, unexpected and unpredictable. In particular, there is
> inconsistency:
>
>  pdl> $x = floor(1); p $x->info
> PDL: Byte D []
>  pdl> $y = pdl(1); p $y->info
>  PDL: Double D []
>
>  Has something been changed in the recent months (or even years, as we
> used to use quite old version of PDL for years and only recently upgraded
> to 2.007) in the way types are converted and one-element piddles are
> treated in the scalar context? I'm just discovering more and more of my
> scripts doing weird things...
>
>  Cheers,
> Marek
>
>
> ------------------------------------------------------------------------------
>
>
>
> _______________________________________________
> pdl-devel mailing 
> listpdl-devel@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/pdl-devel
>
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> pdl-devel mailing list
> pdl-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/pdl-devel
>
------------------------------------------------------------------------------
_______________________________________________
pdl-devel mailing list
pdl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pdl-devel

Reply via email to