2015-12-16 3 views
2

Каким образом выход с использованием манипулятора hexfloat игнорирует любую точность на ostream?Манометр Hexfloat и точность

#include <iostream> 
#include <cmath> 
#include <iomanip> 

using namespace std; 

int main(){ 

    cout << setw(17) << left << "default format: " << setw(20) << right << 100 * sqrt(2.0) << " " << cout.precision() << '\n' 
     << setw(17) << left << "scientific: " << setw(20) << right << scientific << 100 * sqrt(2.0) << " " << cout.precision() << '\n' 
     << setw(17) << left << "fixed decimal: " << fixed << setw(20) << right << 100 * sqrt(2.0) << " " << cout.precision() << '\n' 
     << setw(17) << left << "hexadecimal: " << hexfloat << setw(20) << right << uppercase << 100 * sqrt(2.0) << nouppercase << " " << cout.precision() << '\n' 
     << setw(17) << left << "use defaults: " << defaultfloat << setw(20) << right << 100 * sqrt(2.0) << " " << cout.precision() << "\n\n"; 

} 

Несмотря на точность по умолчанию 6 этого, кажется, игнорируются при выводе двойной в шестнадцатеричном формате (coliru) (GCC 5.2.0):

default format:    141.421 6 
scientific:    1.414214e+02 6 
fixed decimal:    141.421356 6 
hexadecimal:  0X1.1AD7BC01366B8P+7 6 
use defaults:     141.421 6 

Можно ли обеспечить десятичную точность из 6 с использованием шестнадцатеричного формата?

+2

См. [LWG 671] (http://wg21.link/lwg671). –

ответ

5

Формат std::hexfloat предназначен для выдачи точного представления значения с плавающей запятой. Представление строки не для потребления человеком, а прежде всего для восстановления того же представления снова. Таким образом, нет смысла обрезать формат каким-либо образом на основе любой настройки потока.

Смежные вопросы