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

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

Восстановить пароль Регистрация
 
colya
0 / 0 / 0
Регистрация: 04.02.2013
Сообщений: 12
04.02.2013, 00:28     Маленькая мантисса long double #1
здрасте. Я использую 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++
C++ Long Double
Double, int , long double C++
C++ Порядок и мантисса параметра типа double
C++ long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Модератор
Эксперт С++
 Аватар для Croessmah
11833 / 6812 / 769
Регистрация: 27.09.2012
Сообщений: 16,887
Записей в блоге: 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
Ответ Создать тему
Опции темы

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