Я использую Visual Studio 2015 для печати два плавающих чисел:станд :: соиЬ с плавающей
double d1 = 1.5;
double d2 = 123456.789;
std::cout << "value1: " << d1 << std::endl;
std::cout << "value2: " << d2 << std::endl;
std::cout << "maximum number of significant decimal digits (value1): " << -std::log10(std::nextafter(d1, std::numeric_limits<double>::max()) - d1) << std::endl;
std::cout << "maximum number of significant decimal digits (value2): " << -std::log10(std::nextafter(d2, std::numeric_limits<double>::max()) - d2) << std::endl;
Это печатает следующее:
value1: 1.5
value2: 123457
maximum number of significant decimal digits (value1): 15.6536
maximum number of significant decimal digits (value2): 10.8371
Почему 123457 это распечатать для значения 123456.789 ? Является ли спецификация ANSI C++ отображать что-либо для плавающих чисел, когда std :: cout используется без std :: setprecision()?
«Имеет ли спецификация ANSI C++ возможность отображать что-либо для плавающих чисел, когда std :: cout используется без std :: setprecision()?» Да. –
@ Германтас, я имею в виду std :: cout. –
@ Маты, почему спецификация настолько расплывчата на эту тему? Это поможет разработчикам, если спецификация более конкретна (например, напечатайте плавающее число со значительными цифрами). Что-то вроде printf («% .16g \ n», d). –