Nice work tracking this down!

I don't understand how it fixes the compiler specific aspect of the =
problem you found where gcc 4.5.2 on MinGW had the problem but gcc 4.7.2 =
on MinGW did not.  Does gcc 4.7.2 on MinGW already automatically do =
whatever "_control87(_PC_53, _MCW_PC)" does, but gcc 4,5,2 on MinGW does =
not automatically do it so it needs to be done explicitly?

Is the __MINGW32__ macro enough of a check?  I wonder if it could enable =
the _control87 call on system where it is not present.

Dave

On Apr 24, 2013, at 12:05 AM, phasis68 (Heesob Park) wrote:

>=20
> Issue #8299 has been updated by phasis68 (Heesob Park).
>=20
>=20
> I found the issue is due to the difference of the floating point =
precision.
>=20
> Here is a patch for this issue:
>=20
>    diff --git a/numeric.c b/numeric.c.new
>    index 97ba104..c548c0f 100644
>    --- a/numeric.c
>    +++ b/numeric.c.new
>    @@ -3767,6 +3767,9 @@ Init_Numeric(void)
>         _control87(MCW_EM, MCW_EM);
>         _control87(_control87(0,0),0x1FFF);
>     #endif
>    +#if defined(__MINGW32__)
>    +    _control87(_PC_53, _MCW_PC);
>    +#endif
>         id_coerce =3D rb_intern("coerce");
>         id_to_i =3D rb_intern("to_i");
>         id_eq =3D rb_intern("=3D=3D");=20
>=20
>=20
> ----------------------------------------
> Bug #8299: Minor error in float parsing
> https://bugs.ruby-lang.org/issues/8299#change-38861
>=20
> Author: bobjalex (Bob Alexander)
> Status: Open
> Priority: Normal
> Assignee:=20
> Category:=20
> Target version:=20
> ruby -v: trunk
> Backport:=20
>=20
>=20
> I encountered a float that either parses [slightly] differently (or =
converts to string differently) in Ruby than it does in Python or Java. =
This looks like a  Ruby bug since the result "looks" incorrect.
>=20
> It is easily reproduced by entering the magic number (-1.1505945E-5) =
into irb. It behaves the same in 2.0 and 1.9. I'm using Windows.
>=20
> Below is an irb session that demonstrates. Also included are JRuby and =
Python trials that show better behavior.
>=20
> This issue is not causing me any problems, but just in case someone =
there is interested in looking into it...
>=20
> Bob
>=20
>> ruby -v
> ruby 2.0.0p0 (2013-02-24) [i386-mingw32]
>=20
>> irb
> irb(main):001:0> RUBY_VERSION
> =3D> "2.0.0"
> irb(main):002:0> -1.1505945E-5
> =3D> -1.1505945000000001e-05
>=20
>> ruby19 -v
> ruby 1.9.3p392 (2013-02-22) [i386-mingw32]
>=20
>> irb19
> irb(main):001:0> RUBY_VERSION
> =3D> "1.9.3"
> irb(main):002:0> -1.1505945E-5
> =3D> -1.1505945000000001e-05
> irb(main):002:0>
>=20
>> jirb
> irb(main):001:0> -1.1505945E-5
> =3D> -1.1505945e-05
>=20
>> python
> Python 2.7.4rc1 (default, Mar 24 2013, 14:34:32) [MSC v.1500 32 bit =
(Intel)] on
> win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> -1.1505945E-5
> -1.1505945e-05
>>>> repr(-1.1505945E-5)
> '-1.1505945e-05'
>=20
>=20
>=20
>=20
> --=20
> http://bugs.ruby-lang.org/
>=20