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

печать значения типа double в обычной- десятичной форме. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
vvt123
1 / 1 / 0
Регистрация: 13.01.2011
Сообщений: 12
27.02.2012, 00:43     печать значения типа double в обычной- десятичной форме. #1
Нужно вывести на экран значение переменной типа double .
При этом нужно, что бы при любых значениях этой переменной на экран выводилось бы значение в не экспоненциальной форме (а в обычной десятичной - 64.34232 и т.д., безо всяких "e"), при этом точность должна быть насколько хватит размерности double. Помогите, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2012, 00:43     печать значения типа double в обычной- десятичной форме.
Посмотрите здесь:

Побайтовый вывод значения типа double C++
C++ Написать функцию PrnStruct() с одним параметром типа TMyStruct, выводящую на печать значения полей структуры.
C++ В массив типа double записываю целые числа (типа int), но ошибка не вылазиет!
C++ Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
C++ функция принимает два параметра типа double и возвращает значение типа double
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
erro1
0 / 0 / 0
Регистрация: 14.11.2010
Сообщений: 10
27.02.2012, 00:55     печать значения типа double в обычной- десятичной форме. #2
Экспоненциальная форма записи
A555
51 / 51 / 2
Регистрация: 04.04.2011
Сообщений: 209
27.02.2012, 01:01     печать значения типа double в обычной- десятичной форме. #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
# include <iostream>
# include <conio.h>
# include <iomanip.h>
using namespace std;
int main()
{
double a=2.23568955;
cout<<setprecision(12);
cout<<a;
getch();
return 0;
}
знаю что уже поздно но не в топку же)
vvt123
1 / 1 / 0
Регистрация: 13.01.2011
Сообщений: 12
27.02.2012, 01:07  [ТС]     печать значения типа double в обычной- десятичной форме. #4
В обоих случаях длинна будет отображаться столько знаков (соответственно и точность будет такая), сколько указано в setprecision, а мне нужно, что бы точность была такая, насколько хватит размерности double т.е. максимально большая. И в этом как раз проблема (т.к. double хранит значение в экспоненциальной форме). Так что вопрос не разрешён.
A555
51 / 51 / 2
Регистрация: 04.04.2011
Сообщений: 209
27.02.2012, 01:08     печать значения типа double в обычной- десятичной форме. #5
если не ошибаюсь то
C++
1
cout<<setprecision(N);
N максимальное значение может принять 40 больше знаков у меня не выводило) так сделай константой) и поставь 40
а double больше 40 не потянет
vvt123
1 / 1 / 0
Регистрация: 13.01.2011
Сообщений: 12
27.02.2012, 01:18  [ТС]     печать значения типа double в обычной- десятичной форме. #6
A555,
erro1,
В обоих случаях длинна будет отображаться столько знаков (соответственно и точность будет такая), сколько указано в setprecision, а мне нужно, что бы точность была такая, насколько хватит размерности double т.е. максимально большая. И в этом как раз проблема (т.к. double хранит значение в экспоненциальной форме). Так что вопрос не разрешён.

Добавлено через 9 минут
A555, double может хранить гораздо больше 40 знаков но, только для тех чисел у которых мантиса не привысит размерность отведённую для мантисы(всё дело в том, что они там хранятся в экспонициальной форме) т.е.
чилсо double d=0.0000000000000000000000000000000000000000000005 , нормально уместится в double и будет хранится, как 0.5*10 в -50 степени, а вот у d=0.123456789123456789, последняя 9 уже не поместится в мантису и всегда будет выводится только 0.12345678912345678
A555
51 / 51 / 2
Регистрация: 04.04.2011
Сообщений: 209
27.02.2012, 01:21     печать значения типа double в обычной- десятичной форме. #7
хмм) незнал тогда как вариант написать небольшой алгоритм и засунуть всё числа с цифрами после запятой в массив
vvt123
1 / 1 / 0
Регистрация: 13.01.2011
Сообщений: 12
27.02.2012, 01:48  [ТС]     печать значения типа double в обычной- десятичной форме. #8
A555, + ещё возникают всякие нюансы связанные с переводом дробей из двоичных числе и обратно. Я толком даже в этих нюансах пока так и не разобрался, но вот пример демонструрующий проблему:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[]){
 double d;
        d=(0.1+0.7)*10;
        cout.setf(ios_base::fixed);
        cout<<d<<endl;//нормальный резульатат
        cout.precision(17);
        cout << endl << d; // прикол:)
        cin.get();
        cin.get();
    return 0;
}
A555
51 / 51 / 2
Регистрация: 04.04.2011
Сообщений: 209
27.02.2012, 02:01     печать значения типа double в обычной- десятичной форме. #9
да интересная ситуация ) может машина считает по Гейне) что у каждой точки есть окрестность и он берет не 0,1 а 0,0(9)

Добавлено через 4 минуты
и ещё что интересно
C++
1
2
3
  d=(0.6+0.1)*10;
  d=(0.8+0.1)*10;
  d=(0.5+0.1)*10;
так всё нормально) а только тот случай что ты написал
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.02.2012, 03:47     печать значения типа double в обычной- десятичной форме. #10
Максимальное значение для double 1,8e308, причем значащих разрядов всего 16, остальные разряды заполняются нулями. Какой смысл выводить полэкрана нулей, непонятно.

Цитата Сообщение от vvt123 Посмотреть сообщение
A555, + ещё возникают всякие нюансы связанные с переводом дробей из двоичных числе и обратно. Я толком даже в этих нюансах пока так и не разобрался, но вот пример демонструрующий проблему:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[]){
 double d;
        d=(0.1+0.7)*10;
        cout.setf(ios_base::fixed);
        cout<<d<<endl;//нормальный резульатат
        cout.precision(17);
        cout << endl << d; // прикол:)
        cin.get();
        cin.get();
    return 0;
}
Нюанс заключается в том, что не всякая десятичная дробь может быть представлена конечным числом двоичных разрядов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2012, 03:50     печать значения типа double в обычной- десятичной форме.
Еще ссылки по теме:

Можно ли из числа типа double получить 2 числа типа int? C++
C++ Запись информации из вектора типа string в вектор типа double
C++ Ошибка вывода значения 0 типа double

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

Или воспользуйтесь поиском по форуму:
A555
51 / 51 / 2
Регистрация: 04.04.2011
Сообщений: 209
27.02.2012, 03:50     печать значения типа double в обычной- десятичной форме. #11
вот новая информация и твой пример при выводе 16 знаков работает верно а если уже надо больше то закидывай своё число в массив
Yandex
Объявления
27.02.2012, 03:50     печать значения типа double в обычной- десятичной форме.
Ответ Создать тему
Опции темы

Текущее время: 05:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru