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

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

Войти
Регистрация
Восстановить пароль
 
colya
0 / 0 / 0
Регистрация: 04.02.2013
Сообщений: 12
#1

Маленькая мантисса long double - C++

04.02.2013, 00:28. Просмотров 945. Ответов 3
Метки нет (Все метки)

здрасте. Я использую pow (long double, long double) и не смотря на это, меня не удовлетворяет точность (не более 5ти знаков после запятой). А нужно как раз-таки 6. Есть ли какое-то простое решение? Спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 00:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Маленькая мантисса long double (C++):

Порядок и мантисса параметра типа double - C++
Задача из Страуструпа функция печатающая порядок и мантиссу параметра типа double Ну мантисса это вроде бы понятно...

Почему перестает работать программа при замене double на long double? - C++
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете, запустил - все работает, но когда решил...

long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей - C++
Здравствуйте все знают что в VC long double и double одно и тоже, да и при простой проверке это легко выясняется, но нужна информация от...

Вывести long double число без перевода в double - C++
Надо вывести long double число без перевода в double. Пишу: printf("%Lf",S); и выводится неверно. Компилятор -- MinGW, та же фишка на...

Double, int , long double - C++
Как вычислить диапазоны типов вручную указанных в название темы?

Long Double - C++
Разве нет типа более емкого, чем Double в Visual studio? Long Double, как я понял, определяется как обычный Double. А мне нужен аналог по...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 722
04.02.2013, 02:06 #2
есть, например манипулятор setprecision из <iomanip>


C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <iomanip>
 
int main()
{
    double i = 0.112312312;
    using namespace std;
    cout << i << endl;
    cout << setprecision(10) << i << endl;
}
сей код вернёт вторым выводом 9 знаков полсе запятой double
есть аналогичный не манипулятор cout.precision
замечу, что просто cout.precision() вернёт текущую точность, которую в хорошем стиле хорошо бы сохранить в переменную, а потом вернуть назад в cout

так что хороший стиль будет
C++
1
2
3
4
5
6
7
int main()
{
   double i = 0.112312312;
    using namespace std;
   streamsize prec = cout.precision();
    cout << setprecision(10) << i << setprecision(prec)  << endl;
}
где вместо "10" в setprecision(10) пишите желаемое 7 (ибо если вам надо 6 знаков - то пишите 7)
а манипуплятор setprecision(prec) вернёт старую точность потоку назад)

можно обойтись и без манипуляторов просто
C++
1
2
3
 streamsize prec = cout.precision(7); // для точности 6 знаков после запятой
 cout << i << endl;
 сout.precision(prec);
0
Croessmah
Эксперт CЭксперт С++
13213 / 7484 / 843
Регистрация: 27.09.2012
Сообщений: 18,400
Записей в блоге: 3
Завершенные тесты: 1
04.02.2013, 02:10 #3
C++
1
2
3
4
   double i = 232.112312312;
    using namespace std;
   streamsize prec = cout.precision();
    cout << setprecision(10) << i << setprecision(prec)  << endl;
а так только 7 знаков выводит после запятой
а если
C++
1
double i = 235662.112312312;
то вообще только 4

Добавлено через 1 минуту
может так попробовать?
C++
1
cout << std::fixed <<setprecision(10) << i << setprecision(prec)  << endl;
0
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 722
04.02.2013, 02:30 #4
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
   double i = 232.112312312;
    using namespace std;
   streamsize prec = cout.precision();
    cout << setprecision(10) << i << setprecision(prec)  << endl;
а так только 7 знаков выводит после запятой
а если
C++
1
double i = 235662.112312312;
то вообще только 4

Добавлено через 1 минуту
может так попробовать?
C++
1
cout << std::fixed <<setprecision(10) << i << setprecision(prec)  << endl;
ну там же манипулятор выдаёт не цифры после запятой, а только количество цифр, пишите c_count(trunc(c))+p, где p - желаемое число цифер после запятой, я думаю автору этой инфы хватит по горло
попробуйте так, я не против )
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2013, 02:30
Привет! Вот еще темы с ответами:

Перевод из double в long - C++
Можно ли как-то перевести число double в 2 числа long так, чтобы одно число было его целой частью, а другое дробной?

Округление Long double. - C++
Нужно округлить число типа long double в меньшую сторону т.е. просто обнулить всю дробную часть, но при этом надо сохранить эту самую...

описание long double в С - C++
Подскажите как правильно ввести переменнуя типа long double в языке С integer-------------%d float----------------%f double...

Long double и Borland 3.1 - C++
обнаружено на процессоре 486SX с Borland 3.1, на нем экспонента считается до 4932, далее ошибка overflow DosBox+ core i7 на win7х64 +...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.02.2013, 02:30
Ответ Создать тему
Опции темы

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