mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-03 20:30:21 +08:00
locale_facets.tcc (num_put::_M_convert_float): Allow one more digit of precision.
2002-03-08 scott snyder <snyder@fnal.gov> libstdc++/5875 * 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. From-SVN: r50470
This commit is contained in:
parent
3070dd00e9
commit
96854fe254
@ -609,7 +609,9 @@ namespace std
|
||||
_M_convert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod,
|
||||
_ValueT __v) const
|
||||
{
|
||||
const int __max_digits = numeric_limits<_ValueT>::digits10;
|
||||
// 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))
|
||||
|
@ -1,7 +1,7 @@
|
||||
// 1999-11-15 Kevin Ediger <kediger@licor.com>
|
||||
// test the floating point inserters (facet num_put)
|
||||
|
||||
// Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
// Copyright (C) 1999, 2002 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
@ -20,6 +20,8 @@
|
||||
// USA.
|
||||
|
||||
#include <cstdio> // for sprintf
|
||||
#include <cmath> // for abs
|
||||
#include <cfloat> // for DBL_EPSILON
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <locale>
|
||||
@ -355,6 +357,21 @@ test04()
|
||||
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()
|
||||
{
|
||||
@ -362,6 +379,7 @@ main()
|
||||
test02();
|
||||
test03();
|
||||
test04();
|
||||
test05();
|
||||
#ifdef TEST_NUMPUT_VERBOSE
|
||||
cout << "Test passed!" << endl;
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user