From: "h.shirosaki (Hiroshi Shirosaki)" Date: 2013-05-17T14:25:16+09:00 Subject: [ruby-core:55021] [ruby-trunk - Bug #8358] TestSprintf#test_float test failuer on mingw32 Issue #8358 has been updated by h.shirosaki (Hiroshi Shirosaki). The author describes that it is necessary to specify double-precision (53-bit) rounding precision before invoking strtod or dtoa. https://github.com/ruby/ruby/blob/trunk/util.c#L526 So that I created a patch to set _PC_53 temporally when calling strtod, dtoa and hdtoa on mingw x86. It seems that __SSE2_MATH__ is defined only if compiling with -msse2 -mfpmath=sse. In the case it avoids to set _PC_53. This patch would also fix #8299. https://gist.github.com/shirosaki/5596940 ---------------------------------------- Bug #8358: TestSprintf#test_float test failuer on mingw32 https://bugs.ruby-lang.org/issues/8358#change-39368 Author: phasis68 (Heesob Park) Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: ruby 2.1.0dev (2013-05-01) [i386-mingw32] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN I noticed TestSprintf#test_float http://ci.rubyinstaller.org/job/ruby-trunk-x86-test-all/1287/console 1) Failure: TestSprintf#test_float [C:/Users/Worker/Jenkins/workspace/ruby-trunk-x86-build/test/ruby/test_sprintf.rb:193]: [ruby-dev:42551]. <"0x1p+2"> expected but was <"0x1p+1">. This failure is due to r40404. And Actually, this issue is almost same to bug #8299. ruby_hdtoa function requires 53-bit precision but mingw32 compiler is 64-bit precision. There are 2 possible workarounds. 1. adding -msse2 -mfpmath=sse flag when compiling. 2. adding _control87(_PC_53, _MCW_PC) when running. -- http://bugs.ruby-lang.org/