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