[Ironpython-users] IronPython float_info values (was: IronPython always in 32-bit mode on 64bit machine even when running ipy64.exe)

Slide slide.o.mix at gmail.com
Mon May 13 16:29:02 CEST 2013


Pull requests are always welcome :-)


On Mon, May 13, 2013 at 7:16 AM, Markus Schaber <m.schaber at codesys.com>wrote:

> Hi,
>
> Is anyone with commit access willing to commit the fix? And possibly
> include it in the upcoming 2.7.4? :-)
>
> Thanks :-)
>
> Best regards
>
> Markus Schaber
>
> CODESYS(r) a trademark of 3S-Smart Software Solutions GmbH
>
> Inspiring Automation Solutions
>
> 3S-Smart Software Solutions GmbH
> Dipl.-Inf. Markus Schaber | Product Development Core Technology
> Memminger Str. 151 | 87439 Kempten | Germany
> Tel. +49-831-54031-979 | Fax +49-831-54031-50
>
> E-Mail: m.schaber at codesys.com | Web: http://www.codesys.com | CODESYS
> store: http://store.codesys.com
> CODESYS forum: http://forum.codesys.com
>
> Managing Directors: Dipl.Inf. Dieter Hess, Dipl.Inf. Manfred Werner |
> Trade register: Kempten HRB 6186 | Tax ID No.: DE 167014915
> > Von: Jeff Hardy [mailto:jdhardy at gmail.com]
> > Gesendet: Freitag, 10. Mai 2013 18:15
> > An: Markus Schaber
> > Cc: ironpython-users at python.org
> > Betreff: Re: [Ironpython-users] IronPython float_info values (was:
> > IronPython always in 32-bit mode on 64bit machine even when running
> > ipy64.exe)
> >
> > For me, using BitConverter.IsLittleEndian is clearer:
> >
> >   private static readonly double EPSILON =
> > System.BitConverter.Int64BitsToDouble(
> >     System.BitConverter.IsLittleEndian ? 0x3cb0000000000000 :
> > 0x000000000000b03c);
> >
> >   private static readonly double MIN =
> > System.BitConverter.Int64BitsToDouble(
> >     System.BitConverter.IsLittleEndian ? 0x0010000000000000 :
> > 0x0000000000001000);
> >
> > I don't think half-endian machines are worth worrying about. :)
> >
> > - Jeff
> >
> >
> > On Fri, May 10, 2013 at 1:41 AM, Markus Schaber
> > <m.schaber at codesys.com> wrote:
> > > Hi,
> > >
> > >
> > >
> > > Maybe we'd use some conditional initializiation, checking for the
> > > properties of the number, like the following:
> > >
> > >
> > >
> > >         // The definition of Epsion and MinValue differ
> > between .NET
> > > and Python/C,
> > >
> > >         // so we need to define our own values.
> > >
> > >         // Approx. -2.2204460492503131e-16 - the byte order
> > reversed
> > > value is approx.
> > >
> > >         // 2.2290265677773679e-319, so this code delivers the
> > correct
> > > value independently
> > >
> > >         // of the byte order of the machine.
> > >
> > >         private static readonly double EPSILON = Math.Max(
> > >
> > >
> > System.BitConverter.Int64BitsToDouble(0x3cb0000000000000),
> > >
> > >
> > > System.BitConverter.Int64BitsToDouble(0x000000000000b03c));
> > >
> > >         // Approx. 2.2250738585072014e-308 - the byte-order
> > reversed
> > > value is approx.
> > >
> > >         // 2.0236928853657458e-320, so this code delviers the
> > correct
> > > value independently
> > >
> > >         // of the byte order of the machine.
> > >
> > >         private static readonly double MIN = Math.Max(
> > >
> > >
> > System.BitConverter.Int64BitsToDouble(0x0010000000000000),
> > >
> > >
> > > System.BitConverter.Int64BitsToDouble(0x0000000000001000));
> > >
> > >
> > >
> > >         public static floatinfo float_info = new
> > > floatinfo(Double.MaxValue, 1024, 308, MIN, -1021, -307, 15, 53,
> > > EPSILON, 2, 1);
> > >
> > >
> > >
> > > This trick relies on the fact that for the given values, the
> > reversed
> > > byte order produces an zero-Exponent, which are denormalized
> > numbers,
> > > and in both cases, the wanted number is a normalized one which (by
> > > definition) is larger than the denormalized one.
> > >
> > >
> > >
> > > This code is as elegant as checking for the endianness explicitly,
> > and
> > > we are even safe for machines where the integer and float
> > endianness
> > > are different (see
> > > https://en.wikipedia.org/wiki/Endianness#Floating-
> > point_and_endianness
> > > - although I doubt that those hardware is relevant for our user
> > base...)
> > > J
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > Best regards
> > >
> > > Markus Schaber
> > >
> > > CODESYS(r) a trademark of 3S-Smart Software Solutions GmbH
> > >
> > > Inspiring Automation Solutions
> > >
> > > ________________________________
> > >
> > > 3S-Smart Software Solutions GmbH
> > > Dipl.-Inf. Markus Schaber | Product Development Core Technology
> > > Memminger Str. 151 | 87439 Kempten | Germany Tel. +49-831-54031-979
> > |
> > > Fax +49-831-54031-50
> > >
> > > E-Mail: m.schaber at codesys.com | Web: codesys.com | CODESYS store:
> > > store.codesys.com
> > > CODESYS forum: forum.codesys.com
> > >
> > > Managing Directors: Dipl.Inf. Dieter Hess, Dipl.Inf. Manfred Werner
> > |
> > > Trade
> > > register: Kempten HRB 6186 | Tax ID No.: DE 167014915
> > >
> > > Von: Slide [mailto:slide.o.mix at gmail.com]
> > > Gesendet: Mittwoch, 8. Mai 2013 22:44
> > > An: Jeff Hardy
> > > Cc: Markus Schaber; Curt Hagenlocher; ironpython-users at python.org
> > >
> > >
> > > Betreff: Re: [Ironpython-users] IronPython float_info values (was:
> > > IronPython always in 32-bit mode on 64bit machine even when running
> > > ipy64.exe)
> > >
> > >
> > >
> > > Unless Microsoft really wants pain and anguish, they are likely
> > > running in little endian mode. I've never run across an ARM setup
> > that
> > > actually runs in big endian (nor do I want to), so I'm pretty sure
> > its
> > > little endian. I'd be more than willing to test an app on my phone
> > > since Windows Phone is crap anyway, so you couldn't damage it any
> > > worse than it is now :-)
> > >
> > >
> > >
> > > Alex
> > >
> > >
> > >
> > > On Wed, May 8, 2013 at 12:54 PM, Jeff Hardy <jdhardy at gmail.com>
> > wrote:
> > >
> > > On Wed, May 8, 2013 at 9:15 AM, Markus Schaber
> > <m.schaber at codesys.com>
> > > wrote:
> > >> Hi,
> > >>
> > >>
> > >>
> > >
> > >> The main problem for now is that I can't test whatever solution we
> > >> find, because I don't have access to any hardware with non-intel
> > Byte
> > >> Order and a Microsoft .NET. (I don't want to rely on Mono for this
> > >> test...)
> > >
> > > Is ARM big-endian? If so, any Windows 8 ARM tablet (i.e. Surface RT)
> > > or Windows Phone should do. Heck, even the emulator might do. It
> > > shouldn't be too hard to whip up an app that prints those two
> > values,
> > > and I think Alex has a Windows Phone if he'd be willing to test it.
> > >
> > > If ARM is little-endian (or Windows/ARM runs in little-endian mode)
> > > then I don't think it matters; we'd have to try Mono on a PowerPC
> > or
> > > something like that.
> > >
> > > - Jeff
> > >
> > >
> > >
> > >
> > >
> > > --
> > > Website: http://earl-of-code.com
> > >
> > >
> > > _______________________________________________
> > > Ironpython-users mailing list
> > > Ironpython-users at python.org
> > > http://mail.python.org/mailman/listinfo/ironpython-users
> > >
> _______________________________________________
> Ironpython-users mailing list
> Ironpython-users at python.org
> http://mail.python.org/mailman/listinfo/ironpython-users
>



-- 
Website: http://earl-of-code.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20130513/e5cb21bc/attachment.html>


More information about the Ironpython-users mailing list