public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: Scott Snyder <snyder@fnal.gov> To: paolo@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, Subject: Re: libstdc++/5875: operator<<(double) doesn't allow printing full precision (3.0 regression) Date: Fri, 08 Mar 2002 12:16:00 -0000 [thread overview] Message-ID: <20020308201605.3342.qmail@sources.redhat.com> (raw) The following reply was made to PR libstdc++/5875; it has been noted by GNATS. From: Scott Snyder <snyder@fnal.gov> To: paolo@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, gcc-gnats@gcc.gnu.org Cc: Subject: Re: libstdc++/5875: operator<<(double) doesn't allow printing full precision (3.0 regression) Date: 08 Mar 2002 14:09:01 -0600 > I think your analysis is correct (as it was the first time, > by the way ;-) and I would suggest posting directly the > patch in the libstdc++ list. However, if you want to > provide a testcase, you should do this as a patch against > the concerned testsuite file, in the standard form based on > the use of VERIFY, portable (this is the tricky point) > across archs characterized by different machine precisions. > I mean, do you think it would be safe testing: > VERIFY(d - pi == 0.0) ?? > I don't think so. What do you suggest then? Oops --- i see i forgot to include the testsuite patch. Here's the full patch again. I tried to ensure that they were equal to within a relative error of DBL_EPSILON --- it may be that that's a little bit too small though. I admit that as of this point, i've only tested it on linux/i86. sss 2002-03-06 scott snyder <snyder@fnal.gov> * include/bits/locale_facets.tcc (num_put::_M_convert_float): Allow one more digit of precision. * testsuite/27_io/ostream_inserter_arith.cc: Test that we can write a double and read back in the same value. Index: include/bits/locale_facets.tcc =================================================================== RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/locale_facets.tcc,v retrieving revision 1.63.2.3 diff -u -p -c -r1.63.2.3 locale_facets.tcc *** locale_facets.tcc 2002/03/05 19:05:05 1.63.2.3 --- locale_facets.tcc 2002/03/08 19:52:00 *************** namespace std *** 610,616 **** _M_convert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod, _ValueT __v) const { ! const int __max_digits = numeric_limits<_ValueT>::digits10; streamsize __prec = __io.precision(); // Protect against sprintf() buffer overflows. if (__prec > static_cast<streamsize>(__max_digits)) --- 610,618 ---- _M_convert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod, _ValueT __v) const { ! // Note: digits10 is rounded down. We need to add 1 to ensure ! // we get the full available precision. ! const int __max_digits = numeric_limits<_ValueT>::digits10 + 1; streamsize __prec = __io.precision(); // Protect against sprintf() buffer overflows. if (__prec > static_cast<streamsize>(__max_digits)) Index: testsuite/27_io/ostream_inserter_arith.cc =================================================================== RCS file: /cvs/gcc/egcs/libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc,v retrieving revision 1.15 diff -u -p -c -r1.15 ostream_inserter_arith.cc *** ostream_inserter_arith.cc 2002/01/31 00:03:31 1.15 --- ostream_inserter_arith.cc 2002/03/08 19:51:23 *************** *** 20,25 **** --- 20,27 ---- // USA. #include <cstdio> // for sprintf + #include <cmath> // for abs + #include <cfloat> // for DBL_EPSILON #include <iostream> #include <iomanip> #include <locale> *************** test04() *** 355,360 **** --- 357,377 ---- return 0; } + int + test05() + { + double pi = 3.14159265358979323846; + ostringstream ostr; + ostr.precision(20); + ostr << pi; + string sval = ostr.str(); + istringstream istr (sval); + double d; + istr >> d; + VERIFY (abs(pi-d)/pi < DBL_EPSILON); + return 0; + } + int main() { *************** main() *** 362,367 **** --- 379,385 ---- test02(); test03(); test04(); + test05(); #ifdef TEST_NUMPUT_VERBOSE cout << "Test passed!" << endl; #endif
next reply other threads:[~2002-03-08 20:16 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2002-03-08 12:16 Scott Snyder [this message] -- strict thread matches above, loose matches on Subject: below -- 2002-03-11 12:16 paolo 2002-03-07 16:38 paolo 2002-03-07 13:26 snyder
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20020308201605.3342.qmail@sources.redhat.com \ --to=snyder@fnal.gov \ --cc=gcc-prs@gcc.gnu.org \ --cc=paolo@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).