public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/60441] New: Incorrect textual representation for std::mersenne_twister_engine
@ 2014-03-06  8:49 koherde at hotmail dot com
  2023-05-23 12:14 ` [Bug libstdc++/60441] " redi at gcc dot gnu.org
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: koherde at hotmail dot com @ 2014-03-06  8:49 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60441

            Bug ID: 60441
           Summary: Incorrect textual representation for
                    std::mersenne_twister_engine
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: koherde at hotmail dot com

The textual representation of std::mersenne_twister_engine should consist of n
values (n being the state size). libstdc++ uses a textual representation that
consists of n+1 values.
----------------------------------
#include <iostream>
#include <random>
#include <sstream>

int main()
{
    std::mt19937 r;
    std::stringstream ss;
    ss << r;
    int valueCount = 0;
    std::uint32_t val;
    while (ss >> val)
    {
        ++valueCount;
    }
    std::cout << r.state_size << std::endl;
    std::cout << valueCount << std::endl;
}
----------------------------------
Output:
    624
    625
Expected output:
    624
    624


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug libstdc++/60441] Incorrect textual representation for std::mersenne_twister_engine
  2014-03-06  8:49 [Bug libstdc++/60441] New: Incorrect textual representation for std::mersenne_twister_engine koherde at hotmail dot com
@ 2023-05-23 12:14 ` redi at gcc dot gnu.org
  2023-05-23 13:40 ` redi at gcc dot gnu.org
  2023-05-30 11:21 ` redi at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: redi at gcc dot gnu.org @ 2023-05-23 12:14 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60441

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2018-08-07 00:00:00         |2023-5-23

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
The fix is quite simple, but it breaks compatibility between releases:

diff --git a/libstdc++-v3/include/bits/random.tcc
b/libstdc++-v3/include/bits/random.tcc
index 24a5987db0d..8f53d5c5f53 100644
--- a/libstdc++-v3/include/bits/random.tcc
+++ b/libstdc++-v3/include/bits/random.tcc
@@ -486,9 +486,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
       __os.fill(__space);

-      for (size_t __i = 0; __i < __n; ++__i)
+      for (size_t __i = __x._M_p; __i < __n; ++__i)
+       __os << __x._M_x[__i] << __space;
+      for (size_t __i = 0; __i < __x._M_p; ++__i)
        __os << __x._M_x[__i] << __space;
-      __os << __x._M_p;

       __os.flags(__flags);
       __os.fill(__fill);
@@ -512,7 +513,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION

       for (size_t __i = 0; __i < __n; ++__i)
        __is >> __x._M_x[__i];
-      __is >> __x._M_p;
+      __x._M_p = 0;

       __is.flags(__flags);
       return __is;

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug libstdc++/60441] Incorrect textual representation for std::mersenne_twister_engine
  2014-03-06  8:49 [Bug libstdc++/60441] New: Incorrect textual representation for std::mersenne_twister_engine koherde at hotmail dot com
  2023-05-23 12:14 ` [Bug libstdc++/60441] " redi at gcc dot gnu.org
@ 2023-05-23 13:40 ` redi at gcc dot gnu.org
  2023-05-30 11:21 ` redi at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: redi at gcc dot gnu.org @ 2023-05-23 13:40 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60441

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Ignore that, it doesn't work. Due to the way we've implemented the mersenne
twister state, we really do need to remember how much of the state has been
used already, which is why we serialize the _M_p index into the textual
representation.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug libstdc++/60441] Incorrect textual representation for std::mersenne_twister_engine
  2014-03-06  8:49 [Bug libstdc++/60441] New: Incorrect textual representation for std::mersenne_twister_engine koherde at hotmail dot com
  2023-05-23 12:14 ` [Bug libstdc++/60441] " redi at gcc dot gnu.org
  2023-05-23 13:40 ` redi at gcc dot gnu.org
@ 2023-05-30 11:21 ` redi at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: redi at gcc dot gnu.org @ 2023-05-30 11:21 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60441

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
We have the same problem with std::subtract_with_carry_engine.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-05-30 11:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-03-06  8:49 [Bug libstdc++/60441] New: Incorrect textual representation for std::mersenne_twister_engine koherde at hotmail dot com
2023-05-23 12:14 ` [Bug libstdc++/60441] " redi at gcc dot gnu.org
2023-05-23 13:40 ` redi at gcc dot gnu.org
2023-05-30 11:21 ` redi at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).