Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.62
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
#1

double + cout - C++

14.10.2012, 15:42. Просмотров 3048. Ответов 27
Метки нет (Все метки)

Через cout вывожу double.

C++
1
2
double a =  48.799999999999997;
cout << a;
Выводит: 48.8.

Как сделать, что бы не округляло?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 15:42     double + cout
Посмотрите здесь:

cout (double) - C++
Всем привет! Подскажите плз как вывести число типа дабл при помощи cout так чтобы были видны столько знаков, сколько я захочу а не 6...

double a=1/2; cout<<a;(a=0) что не так? - C++
#include &lt;iostream&gt; using namespace std; void main() { double a=1/2; cout&lt;&lt;a; } выводит a=0; использую 2008 студию....

Неправильно работает cout для чисел типа double и float - C++
Здравствуйте. Скажите, почему эта программа выводит на экран число 2, а не 2.5 ? #include &lt;iostream.h&gt; int main() { double...

typedef double (*d)(double); - C++
//--------------------------------------------------------------------------- #include &quot;math.h&quot; #include &lt;stdio.h&gt; #include...

Перевод double to double - C++
Всем привет! проблема такая : Есть вектор типа double. Из него надо считать число в переменную, которая тоже имеет тип double. Считываю...

new cout - C++
Как создать свой объект-аналог cout?

[C++] cout От A до Z и от 0 до 9 - C++
Атач - задание, Задание из книжки Бьярна Страуструпа Вот что знаю: // TBIKC.cpp: определяет точку входа для консольного приложения. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
14.10.2012, 15:49     double + cout #2
C++
1
2
3
double a =  48.799999999999997;
cout.precision(20);
cout << a;
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
14.10.2012, 15:49     double + cout #3
http://www.cplusplus.com/reference/i...ase/precision/
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.10.2012, 16:03  [ТС]     double + cout #4
С помощью точности я и так могу. Мне нужно с исходной точностью, но что бы не округляло

Добавлено через 10 минут
вверх
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 16:03     double + cout #5
При выводе double в десятичной системе счисления в любом случае происходит округление, отбрасывающее незначащие десятичные цифры (внутри ведь хранится двоичное число). Так что ставьте precision(100500) и получайте истинно хранимое внутри число, если так уж надо.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.10.2012, 16:06  [ТС]     double + cout #6
~OhMyGodSoLong~, рисуется таблица. В консоли. Поэтому поставить слишком большую точность не представляется возможным.

Отладчик vs2012 показывает значение 48.799999999999997. Как вывести число с исходной точностью, но не округляя его? И не используя самописных алгоритмов.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 16:09     double + cout #7
Что значит исходная точность? Какой она должна быть?

Вон то число 48.799999999999997 — это на самом деле число 48.7999999999999971578290569595992565155029296875 в памяти из-за особенностей представления чисел с плавающей точкой. double хранит примерно от 15 до 16 десятичных значащих цифр числа (точное количество зависит от самого числа). Для гарантии выводится 17 цифр (одна потенциально незначащая).

Вот с такой точностью? Меньшей? Большей?
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.10.2012, 16:17  [ТС]     double + cout #8
~OhMyGodSoLong~, с той точностью, которая сейчас установлена в cout с помощью функции setprecision. Неужели в cout нету ни одного флага, отвечающего за округление?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 16:43     double + cout #9
Я не понял, в чём проблема?
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <iomanip>
 
int main()
{
  std::cout.precision(5);
  std::cout << 5.123456789 << "\n";
  std::cout << std::setprecision(3) << 5.123456789 << "\n";
  std::cout << 5.123456789 << "\n";
}
Evg
Эксперт CАвтор FAQ
17543 / 5781 / 370
Регистрация: 30.03.2009
Сообщений: 15,920
Записей в блоге: 26
14.10.2012, 16:54     double + cout #10
Цитата Сообщение от Kgfq Посмотреть сообщение
Как вывести число с исходной точностью
Никак. Потому что данное число изначально нельзя представить точно в двоичном виде. Если, к примеру, взять число 1/3, то ты его в принципе не сможешь напечатать точно в десятичной системе счисления. В зависимости от количество печатаемых знаков можно напечатать как "0.3", "0.33", "0.333" и т.д. Но ты никогда его точно не напечатаешь. В твоей исходной задаче проблема та же самая: ты пишешь в программе число в десятичном виде, а оно не может быть точно переведено в двоичный вид (потому что машина хранит данные в двоичном виде), а следовательно, не может быть в дальнейшем точно напечатано
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.10.2012, 17:23  [ТС]     double + cout #11
Evg, а если я хочу, что бы вывело 48.799999 и все?
ведь можно просто "обрезать" конец?

не самописными функциями
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 17:33     double + cout #12
А, вы про это. Нет, cout, к сожалению, не умеет нормально контролировать способ округления чисел. Только к ближайшему. Можно разве что заставить его выводить как 48.800000 (манипулятор fixed).
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.10.2012, 19:36  [ТС]     double + cout #13
Странно, что разработчики STL не подумали об этом...
Evg
Эксперт CАвтор FAQ
17543 / 5781 / 370
Регистрация: 30.03.2009
Сообщений: 15,920
Записей в блоге: 26
15.10.2012, 11:06     double + cout #14
Цитата Сообщение от Kgfq Посмотреть сообщение
ведь можно просто "обрезать" конец?
Просто обрезать нельзя, можно только округлять

Цитата Сообщение от Kgfq Посмотреть сообщение
Странно, что разработчики STL не подумали об этом...
О чём? О неправильном округлении?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2012, 15:55     double + cout
Еще ссылки по теме:

cout - C++
for(i=1;i&lt;=n;i++) cout&lt;&lt;'|'&lt;&lt;left&lt;&lt;internal&lt;&lt;ex; что здесь ни то

cout - C++
Если есть std::cout, то должен быть и просто cout. Есть ли он? И если есть, в чем отличия? А если нету, то зачем нужно было пространство...

cout - C++
Всем привет! В С++ не силён особо, такой вопрос. Дан массив, все элементы, которые больше 10, заменить на их квадратный корень. Это ок...

cout << . << . << - C++
почему cout начинает преобразовывать переменные с конца а выводить с начала ?? т.е. cout &lt;&lt; &quot;What is your name and how old are...

Неработающий cout - C++
Не выводит значения mass1 и mass2, помогите разобраться #include &lt;iostream&gt; using namespace std; int main() { int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
15.10.2012, 15:55  [ТС]     double + cout #15
Evg, о выводе БЕЗ округления вовсе
Yandex
Объявления
15.10.2012, 15:55     double + cout
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru