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

Markus Schaber m.schaber at codesys.com
Wed May 8 18:06:10 CEST 2013


I tried to find a way to calculate it reliably, but did not find an easy, nice and fast way.

I guess setting the IEC bits directly is the best way for now, together with a comment why we don't use the false friends provided by .NET.

However, as far as I read the docs of DoubleToInt64Bits() and Int64BitsToDouble(), the conversion may be subject to endianess issues...

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<mailto:m.schaber at codesys.com> | Web: codesys.com<http://www.codesys.com> | CODESYS store: store.codesys.com<http://store.codesys.com>
CODESYS forum: forum.codesys.com<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: Curt Hagenlocher [mailto:curt at hagenlocher.org]
Gesendet: Mittwoch, 8. Mai 2013 17:34
An: Jeff Hardy
Cc: Markus Schaber; 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)

You can get precise values of these without depending on the compiler's ability to convert text to floating point values by saying

sys.float_info.min = System.BitConverter.Int64BitsToDouble(0x0010000000000000)  # i.e. 2^-1023
sys.float_info.epsilon = System.BitConverter.Int64BitsToDouble(0x3cb0000000000000) # i.e. 2^-53

On Wed, May 8, 2013 at 8:10 AM, Jeff Hardy <jdhardy at gmail.com<mailto:jdhardy at gmail.com>> wrote:
On Wed, May 8, 2013 at 4:07 AM, Markus Schaber <m.schaber at codesys.com<mailto:m.schaber at codesys.com>> wrote:


http://www.johndcook.com/blog/2010/06/08/c-math-gotchas/ explains the problem: The double.MinValue and double.Epsilon in C# have different meanings thant DBL_MIN and DBL_EPSILON in C.

I'm looking for a way how to get the wanted values... :)

So am I! .NET does not provide them as constants as far as I can tell. I'm pretty sure .NET requires the use of IEEE-854 floats so they could probably just be hardcoded to match the C constants but ... ick. Maybe there's a way to calculate the C versions from what .NET provides?

The relevant issue is https://ironpython.codeplex.com/workitem/27840.

- Jeff

Ironpython-users mailing list
Ironpython-users at python.org<mailto:Ironpython-users at python.org>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20130508/eb302994/attachment.html>

More information about the Ironpython-users mailing list