Send MinGW-Notify mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
https://lists.osdn.me/mailman/listinfo/mingw-notify
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of MinGW-Notify digest..."
Please do not reply to this notification; the sender address is unable to
accept incoming e-mail. If you wish to unsubscribe you can do so at
https://lists.osdn.me/mailman/listinfo/mingw-notify.
Today's Topics:
1. [mingw] #41597: std::remquo does not yield the proper result
for the quotient (MinGW Notification List)
2. [mingw] #41597: std::remquo does not yield the proper result
for the quotient (MinGW Notification List)
3. [mingw] #41597: std::remquo does not yield the proper result
for the quotient (MinGW Notification List)
4. [mingw] #41597: std::remquo does not yield the proper result
for the quotient (MinGW Notification List)
5. [mingw] #41597: std::remquo does not yield the proper result
for the quotient (MinGW Notification List)
----------------------------------------------------------------------
Message: 1
Date: Wed, 24 Feb 2021 13:24:10 +0100
From: MinGW Notification List <[email protected]>
To: OSDN Ticket System <[email protected]>
Subject: [MinGW-Notify] [mingw] #41597: std::remquo does not yield the
proper result for the quotient
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
#41597: std::remquo does not yield the proper result for the quotient
Open Date: 2021-02-17 22:25
Last Update: 2021-02-24 13:24
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 13:24 Updated by: avhaecke
Comment:
Reply To keith
Reply To avhaecke
Reply To keith
I've prepared the attached tentative patch, to resolve this issue; it appears
to DTRT, testing under Wine with your example values, (and a few other
multiples of 90.0, for the dividend).
I've also attached an updated copy of libmingwex.a, with the patch applied.
Please install it, in place of your existing libmingwex.a, test, and confirm
that it resolves the issue for you.
Thank you for your patch (and your support).
However, I cannot link with your new libmingwex.a library as it appears to have
the following symbols as Undefined (U) :
{{{
_impmsvcrt_realloc
_impmsvcrt_free
}}}
Those 2 symbols do not appear in the libmingwex library that came from the
installer.
Okay. Then your mingwrt/w32api installation is too old; did you follow
apodtele's advice, and upgrade to GCC-9.2.0? In conjunction with that, you
should also be using up-to-date versions of the MinGW runtime, and W32API
libraries — it simply isn't practical for me to continue backporting to those
versions of the same vintage as GCC-6.3.0; the attached replacement
libmingwex.a is compatible with version 5.4.x runtime libraries, (and maybe
also 5.3.x), but probably not with anything older.
Furthermore, if you are using a mingw-get installer which suggests that
GCC-6.3.0 is the latest release, then it is still referring to the (defunct)
SourceForge FRS; please refer to this mailing-list post, for advice on ensuring
that you can continue to receive updates.
Thank you for pointing me to the correct repository.
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.
The program is as follows :
#include <iostream>
#include <cmath>
int main(void)
{
int i = 14449 ;
long double numer = 90.0 ;
long double demo = 90.0 ;
// long double
long double result = std::remquo(number, denom, &i) ;
std::cout << result << " " << i << std::endl ;
return 0 ;
}
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.
Many thanks for your time.
Alex
---------------------------------------------------------------------
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
------------------------------
Message: 2
Date: Wed, 24 Feb 2021 14:40:07 +0200
From: MinGW Notification List <[email protected]>
To: OSDN Ticket System <[email protected]>
Subject: [MinGW-Notify] [mingw] #41597: std::remquo does not yield the
proper result for the quotient
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
#41597: std::remquo does not yield the proper result for the quotient
Open Date: 2021-02-17 23:25
Last Update: 2021-02-24 14:40
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 14:40 Updated by: yaser_elkelany
Comment:
Good best
---------------------------------------------------------------------
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
------------------------------
Message: 3
Date: Wed, 24 Feb 2021 20:55:42 +0000
From: MinGW Notification List <[email protected]>
To: OSDN Ticket System <[email protected]>
Subject: [MinGW-Notify] [mingw] #41597: std::remquo does not yield the
proper result for the quotient
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
#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
------------------------------
Message: 4
Date: Wed, 24 Feb 2021 21:15:22 +0000
From: MinGW Notification List <[email protected]>
To: OSDN Ticket System <[email protected]>
Subject: [MinGW-Notify] [mingw] #41597: std::remquo does not yield the
proper result for the quotient
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
#41597: std::remquo does not yield the proper result for the quotient
Open Date: 2021-02-17 21:25
Last Update: 2021-02-24 21:15
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 21:15 Updated by: keith
Comment:
Addendum To keith
I've fixed it, ... I'll update the patch, to reflect the correction, shortly.
Done. The difference, w.r.t. the preceding patch, is effectively:
$ hg diff diff --git a/mingwrt/mingwex/math/remquo_generic.sx
b/mingwrt/mingwex/math/remquo_generic.sx ---
a/mingwrt/mingwex/math/remquo_generic.sx +++
b/mingwrt/mingwex/math/remquo_generic.sx @@ -90,12 +90,12 @@ */ .globl
_remquol .def _remquol; .scl 2; .type 32; .endef _remquol: - fld
DWORD ptr 4[esp] /* FPU TOS = x */ - fld DWORD ptr 16[esp]
/* FPU TOS = y, x */ + fld TBYTE ptr 4[esp] /* FPU TOS = x
*/ + fld TBYTE ptr 16[esp] /* FPU TOS = y, x */ mov
edx, DWORD ptr 28[esp] /* EDX = *q */ /* Hand off the preloaded register
set, to the shared computational * back-end routine, to... */
---------------------------------------------------------------------
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
------------------------------
Message: 5
Date: Thu, 25 Feb 2021 00:04:26 +0200
From: MinGW Notification List <[email protected]>
To: OSDN Ticket System <[email protected]>
Subject: [MinGW-Notify] [mingw] #41597: std::remquo does not yield the
proper result for the quotient
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
#41597: std::remquo does not yield the proper result for the quotient
Open Date: 2021-02-17 23:25
Last Update: 2021-02-25 00:04
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-25 00:04 Updated by: yaser_elkelany
Comment:
Very good best
---------------------------------------------------------------------
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
------------------------------
Subject: Digest Footer
_______________________________________________
MinGW-Notify mailing list
[email protected]
https://lists.osdn.me/mailman/listinfo/mingw-notify
------------------------------
End of MinGW-Notify Digest, Vol 41, Issue 16
********************************************