From: Heesob Park Date: 2013-04-25T17:39:41+09:00 Subject: [ruby-core:54578] Re: [ruby-trunk - Bug #8299] Minor error in float parsing 2013/4/25 naruse (Yui NARUSE) : > > Issue #8299 has been updated by naruse (Yui NARUSE). > > > phasis68 (Heesob Park) wrote: >> 2013/4/25 naruse (Yui NARUSE) : >> > >> > Issue #8299 has been updated by naruse (Yui NARUSE). >> > >> > >> > phasis68 (Heesob Park) wrote: >> >> 2013/4/25 naruse (Yui NARUSE) : >> >> > Therefore use SSE2 rather than such workaround. >> >> >> >> I'm not sure why you think SSE2 can fix this issue. >> >> >> >> The ruby_strtod function used in converting string value to double >> >> value requires double-precision (53-bit) rounding precision but >> >> mingw32 gcc 4.5.2 have default 64-bit precision which higher than >> >> other compilers. >> >> >> >> So the patch lowers precision from 64 bit to 53 bit. >> > >> > double arithmetics with SSE2 is double-precision. >> > see also gcc's -mfpmath=sse option >> > http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/i386-and-x86_002d64-Options.html#index-march-959 >> >> I agree that SSE2 is the better solution for modern OS and modern compiler. >> >> But SSE2 has more restrictions than x87. >> SSE2 is not supported on the following environment. >> Microsoft Visual C++ Compiler prior to Visual Studio .NET 2003. > > Use newer compiler. The requirement in win32/README.win32 need to be modified. > >> AMD CPUs prior to Athlon 64, including all Socket A-based CPUs >> Intel CPUs prior to Pentium 4 > > Use -mfpmath=sse,387. > As I wrote before, if you want to get the same result with x87 FPU _control87(_PC_53, _MCW_PC) is not sufficient. > It needs to handle 15 bit exponent. I don't want the same result with SSE2 and x87 FPU. The 15 bit exponent is not a matter of this issue. The point is that ruby_strtod function requires 53-bit precision and mingw32 4.5.2 compiler is 64-bit precision unlike other windows compiler which is 53-bit precision. I confirmed that _control87(_PC_53, _MCW_PC) patch works fine with ruby 1.9.3 mingw32 gcc 4.5.2 version. > If you want to do that, it is as hard as implementing strictfp of Java on x87. > see also http://math.nist.gov/javanumerics/reports/jgfnwg-01.html > http://www.shudo.net/java-grandprix99/strictfp/#JGNWG98-2 (Japanese) You've gone too far from this issue. The issuer wants the correct value of strtod function on the ruby 1.9.3 mingw32 version. My patch is for mingw32 gcc compiler only.