From: David MacMahon Date: 2013-04-25T02:22:47+09:00 Subject: [ruby-core:54556] Re: [ruby-trunk - Bug #8299] Minor error in float parsing 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: > > Issue #8299 has been updated by phasis68 (Heesob Park). > > > I found the issue is due to the difference of the floating point precision. > > Here is a patch for this issue: > > 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 = rb_intern("coerce"); > id_to_i = rb_intern("to_i"); > id_eq = rb_intern("=="); > > > ---------------------------------------- > Bug #8299: Minor error in float parsing > https://bugs.ruby-lang.org/issues/8299#change-38861 > > Author: bobjalex (Bob Alexander) > Status: Open > Priority: Normal > Assignee: > Category: > Target version: > ruby -v: trunk > Backport: > > > 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. > > 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. > > Below is an irb session that demonstrates. Also included are JRuby and Python trials that show better behavior. > > This issue is not causing me any problems, but just in case someone there is interested in looking into it... > > Bob > >> ruby -v > ruby 2.0.0p0 (2013-02-24) [i386-mingw32] > >> irb > irb(main):001:0> RUBY_VERSION > => "2.0.0" > irb(main):002:0> -1.1505945E-5 > => -1.1505945000000001e-05 > >> ruby19 -v > ruby 1.9.3p392 (2013-02-22) [i386-mingw32] > >> irb19 > irb(main):001:0> RUBY_VERSION > => "1.9.3" > irb(main):002:0> -1.1505945E-5 > => -1.1505945000000001e-05 > irb(main):002:0> > >> jirb > irb(main):001:0> -1.1505945E-5 > => -1.1505945e-05 > >> 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' > > > > > -- > http://bugs.ruby-lang.org/ >