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

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

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

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

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

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

описание long double в С C++
Округление Long double. C++
C++ Long Double
C++ Перевод long double в string
Вывод константы long double C++
C++ Порядок и мантисса параметра типа double
long double и char C++
C++ Перевод long double в строку
C++ LONG VS DOUBLE / INT VS FLOAT
C++ Преобразование строки в long double
Long double и Borland 3.1 C++
C++ Long float и double

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
04.02.2013, 02:06     Маленькая мантисса long double #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);
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12520 / 7082 / 797
Регистрация: 27.09.2012
Сообщений: 17,489
Записей в блоге: 2
Завершенные тесты: 1
04.02.2013, 02:10     Маленькая мантисса long double #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;
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
04.02.2013, 02:30     Маленькая мантисса long double #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 - желаемое число цифер после запятой, я думаю автору этой инфы хватит по горло
попробуйте так, я не против )
Yandex
Объявления
04.02.2013, 02:30     Маленькая мантисса long double
Ответ Создать тему
Опции темы

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