выводить потоковые числа с точностью - PullRequest
5 голосов
/ 27 января 2012

У меня проблема с точностью чисел с плавающей точкой:

int main(void) {
  double b = 106.829599;
  float a = b;
  std::cerr << std::setprecision(6) << "a = " << a << "; b = " << b << std::endl;
  std::cerr << std::setprecision(7) << "a = " << a << "; b = " << b << std::endl;
}

результат:

а = 106,83; b = 106,83

а = 106,8296; b = 106,8296

Итак, мой вопрос: почему числа в первой строке такие короткие (я ожидал увидеть 106,829)

gcc 4.1.2, также я сделал тест на LWS

1 Ответ

8 голосов
/ 27 января 2012

На самом деле, 106,829599, округленное до 6 цифр (3 десятичных знака), равно 106,830, что отображается как 106,83, поскольку точность до 6 цифр, заданная для setprecision , является только максимальным значением.

Десятичная точность определяет максимальное количество цифр , записано в операциях вставки для выражения значений с плавающей точкой.

То, что вы можете искать, это комбинирование setprecision с fixed .

...