#41597: std::remquo does not yield the proper result for the quotient Open Date: 2021-02-17 21:25 Last Update: 2021-02-24 20:55 URL for this Ticket: https://osdn.net//projects/mingw/ticket/41597 RSS feed for this Ticket: https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=41597 --------------------------------------------------------------------- Last Changes/Comment on this Ticket: 2021-02-24 20:55 Updated by: keith Comment: Reply To avhaecke I performed the full upgrade to GCC 9.2.0 and replaced the libmingwex.a with the one you provided. It did correct the unexpected behavior I had encountered and my specific problem i.e. quo gets the correct value after the call std::remquo(x, y, quo) when x and y are of double type. However, I had a test program for remquo that also tested the case when x and y were "long double" rather than double and it continues to yield unexpected result with the library you provided. [...code snipped...] and I get as a result (with the new library) : nan -2147483648 I do not know if this behavior is expected as the correction may be a partial patch but I wanted to bring it to your attention. Thanks, Alex. Ouch! GIGO. That behaviour definitely wasn't expected, but I'd made a copy-and-paste error ... copied the remquof() preamble to remquol() but neglected to change the argument type references from DWORD to TBYTE, so the FPU was attempting to load REAL4 arguments from stack offsets within a single REAL10 value, yielding obviously invalid input. I've fixed it, and refreshed the attached libmingwex.a. It appears to work correctly now, for me, when I change the data types from double to long double, where appropriate in my test program, (and substitute std::strtold() for std::strtod()), but I'd appreciate if you'd like to test as well. I'll update the patch, to reflect the correction, shortly. BTW, please wrap example code in formatted text block markup, to preserve layout. The OSDN site documentation tells you how, or you can see how I've modified your posts, if you select the "edit" option. --------------------------------------------------------------------- Ticket Status: Reporter: avhaecke Owner: keith Type: Issues Status: Open [Owner assigned] Priority: 5 - Medium MileStone: (None) Component: WSL Severity: 5 - Medium Resolution: None --------------------------------------------------------------------- Ticket details: Context : This problem was encountered with gcc on MinGW in the following version : gcc.exe (MinGW.org GCC-6.3.0-1) 6.3.0 Description : The following code : double numer = 90.1 ; double denom = 90 .0 ; int quot ; double result = std::remquo(numer, denom, ") ; std::cout << "result " << result << std::endl ; std::cout << "quot " << quot << std::endl;should yield : result 0.1 quot 1 As is expected from std::remquo, quot has a magnitude which should be congruent (modulo 2 to the nth) to the magnitude of the integral quotient of x/y, n being greater or equal than 3. However with gcc 6.3.0, on MinGW, the above instructions yield : result 0.1 quot 0 On another version of gcc (gcc 4.9.1 2014), the expected behavior is encountered. -- Ticket information of MinGW - Minimalist GNU for Windows project MinGW - Minimalist GNU for Windows Project is hosted on OSDN Project URL: https://osdn.net/projects/mingw/ OSDN: https://osdn.net URL for this Ticket: https://osdn.net/projects/mingw/ticket/41597 RSS feed for this Ticket: https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=41597