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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 106, средняя оценка - 4.87
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
#1

Вещественные числа с плавающей точкой, точность вычислений - C++

07.06.2012, 12:31. Просмотров 13554. Ответов 70
Метки нет (Все метки)

Работаю над проектом, требующим большую точность вычисления вещественных чисел.
Решила использовать long double в надежде получить точность побольше.
Столкнулась с тем, что C++ Builder просто отказывается давать желаемую точность.
Точность необходима до 10^20. То есть до 20 числа после запятой.
Подскажите пожалуйста как решить данную проблему.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2012, 12:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вещественные числа с плавающей точкой, точность вычислений (C++):

Printf лжет при выводе чисел с плавающей точкой? - C++
void doubleToString(double v, char * str){ if(v < 0) { *str = '-'; v = -v; } int number = static_cast<int>(v); double...

Число с плавающей точкой - C++ Builder
Здравствуйте. Такая проблема: Написал однослойный персептрон. Создаю, обучаю, проверяю - все норм. но при повторном обучении вылезает...

Работа с плавающей точкой в Мемо - C++ Builder
Помогите разобраться: у меня есть число с плавающей точкой. Есть задание чтобы в Мемо отображалось 18 символов из которых заданное число с...

Сравнение чисел с плавающей точкой - C++ Builder
Добрый день. Сегодня заметил странную проблему в C++ Builder (в 6-м и XE). Связана она с сравнением чисел с плавающей точкой. Есть...

сумму чисел с плавающей точкой - C++ Builder
у меня проблема возникла когда я считаю сумму чисел то челые числа считает нормально а с плавающей точкой как то не так например когда я...

Вычисление чисел с плавающей точкой - C++ Builder
делаю калькулятор и столкнулся с проблемой вычисления чисел с плавающей точкой...как можно реализовать подскажите

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Evg
Эксперт CАвтор FAQ
17802 / 6008 / 387
Регистрация: 30.03.2009
Сообщений: 16,511
Записей в блоге: 26
08.06.2012, 22:03 #31
Цитата Сообщение от Avazart Посмотреть сообщение
Я имел ввиду обойти каким нибудь математичеким путем, например разложением в ряд
Если вопрос в том, как их хранить - то никак. Если нет представления о том, как хранятся плавающие числа - можешь почитать объяснение на пальцах.

Ты можешь хранить два отдельных слагаемых в двух разных переменных: a=1 и b=10^-20. Если потом тебе надо будет вычесть 0.999, то ты это представишь как a=(1 - 0.999) и b=10^-20. По другому никак - формат хранения чисел тебе этого сделать не позволит
1
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
08.06.2012, 22:11 #32
Ты можешь хранить два отдельных слагаемых в двух разных переменных
Что-то вроде этого я и имел ввиду...
( например если разкладывать в ряд то члены ряда можно хранить в векторе ну это зависит от конкретного случая)
А какие есть библиотеки для таких случаев для С++? А то что-то не нагуглил...
0
Evg
Эксперт CАвтор FAQ
17802 / 6008 / 387
Регистрация: 30.03.2009
Сообщений: 16,511
Записей в блоге: 26
08.06.2012, 23:35 #33
Цитата Сообщение от Avazart Посмотреть сообщение
А какие есть библиотеки для таких случаев для С++?
Поискал по "huge float point". Наткнулся на
http://gmplib.org/
http://www.mpfr.org/
http://www.nongnu.org/hpalib/
2
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
08.06.2012, 23:44 #34
http://axsm.blogspot.com/2010/05/gmp-windows-mingw.html
http://agapii.ucoz.ru/publ/sborka_gm...indows/1-1-0-7

Добавлено через 4 минуты
Тема осталась пуста gmp+builder 6.0
0
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
09.06.2012, 00:38 #35
Нашел уже скомпилиные либы под некоторые компиляторы http://www.cs.nyu.edu/exact/core/gmp/
Подключить их не под Builder не под Visual не получилось...
Builder на мой взгляд выдает что то критичное ( использовал dll для VC перековертив их в lib)
0
Миниатюры
Вещественные числа с плавающей точкой, точность вычислений  
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
09.06.2012, 00:41 #36
VC ругается только когда пытаешся использовать код( но возможно что не так сделал)
0
Миниатюры
Вещественные числа с плавающей точкой, точность вычислений  
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
09.06.2012, 00:47 #37
Еще ссылки
http://www.imach.uran.ru/cbignum/papers/cb2009p.htm
Как подключить gmp lib
1
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
09.06.2012, 00:49  [ТС] #38
Теперь ещё с этим всем разобраться.
Спасибо!
0
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
09.06.2012, 01:15 #39
Удалось скомпилить под VC по этим рекомендациям
Я делал под Visual Studio.
Качаете архив gmp-static-vc-4.1.2.zip отсюда. http://www.cs.nyu.edu/exact/core/gmp/
Добавляете файл gmp.h в папку VC/include, а *.lib в VC/lib

Создаете новый ПУСТОЙ проект, пишите любой код на gmp (читайте мануалы, что Вам дали выше).
Например (это выводит 2^100):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <gmp.h>
 
int main ( ) {
   mpz_t x;      
   mpz_init_set_si(x, 1);
      
   for ( int i = 0; i < 100; i ++ )
      mpz_add ( x, x, x ); 
 
   mpz_out_str ( stdout, 10, x );
 
   return 0;
}
В настройках проекта (Project -> Properties) нужно указать:
C++/Code Generation -> Runtime library = Multi-threaded (/MT)
Linker/Input -> Additional dependences = "gmp.lib" и "libcmt.lib" (без кавычек)
Linker/Input -> Ignore Specific library = libc.lib

Все, после этого у меня все сразу запустилось.
0
Evg
Эксперт CАвтор FAQ
17802 / 6008 / 387
Регистрация: 30.03.2009
Сообщений: 16,511
Записей в блоге: 26
09.06.2012, 15:46 #40
На всякий случай. Тему переместили и открыли
0
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
09.06.2012, 16:30 #41
Случайно наткнулся...читаю ПРОграммист №12 (март)2011 "АРИФМЕТИКА ДЛИННЫХ ЧИСЕЛ"

Добавлено через 20 минут
Преобразование сверхбольшого двоичного числа в строку-десятичное_число.
0
Evg
Эксперт CАвтор FAQ
17802 / 6008 / 387
Регистрация: 30.03.2009
Сообщений: 16,511
Записей в блоге: 26
09.06.2012, 17:07 #42
Чота у меня под линуксом .zip не открывается. Но подозреваю, что ТС'а это не очень-то и устроит, ибо навряд ли в той библиотеке есть логарифм
0
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
09.06.2012, 17:38 #43
логарифм
Ну возможно логарифм и не понадобится... все зависит от чисел..

Просто как не пытался библиотеку gmp для VC++ под билдер не удалось прикрутить...
0
Evg
Эксперт CАвтор FAQ
17802 / 6008 / 387
Регистрация: 30.03.2009
Сообщений: 16,511
Записей в блоге: 26
09.06.2012, 18:22 #44
Цитата Сообщение от Avazart Посмотреть сообщение
Ну возможно логарифм и не понадобится...
Дык у ТС'а это было первоначальным описанием проблемы. С другой стороны может и вправду можно сначала вычесть два числа через библиотеку, а получившуюся разницу привести к long double и вычесть логарифм. Но это какая-то кривая технология

Цитата Сообщение от Avazart Посмотреть сообщение
Просто как не пытался библиотеку gmp для VC++ под билдер не удалось прикрутить...
Ну тут я вряд ли что-то посоветую. Я не понимаю, как строить библиотеки под винду и как их потом использовать. Когда я к билдеру прикручивал lua, то вместо онанизма с подключением библиотеки мне намного проще показалось включить исходники lua целиком в свой проект и не мучиться
1
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
09.06.2012, 18:52 #45
включить исходники lua целиком в свой проект и не мучиться
Но исходники пришлось подправлять ручками наверное?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2012, 18:52
Привет! Вот еще темы с ответами:

Настройка вывода чисел с плавающей точкой - C++ Builder
Испльзую функцию fprintf() для вывода в текстовый файл. Как сделать чтобы эта функция для разделения целой и дробной части использовала...

Ошибка в Borlan C++ Builder c "не допустимым значением с плавающей точкой" - C++ Builder
Приветствую всех! Меня попросили написать не большую программу в Borland C++ Builder, я почти закончил, но у меня возникла одна проблема....

Ввод числа с плавающей запятой - C++ Builder
Как сделать что бы первый символ мог быть или &quot;-&quot; или число, потом чтобы запятая начиналась со второго символа, и могла использоваться лишь...

Точность числа с плавающей точкой - C++
У типа float числа одинарной точности с плавающей запятой обеспечивают относительную точность 7-8 десятичных цифр. Внимание, вопрос!...


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

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

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