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

C++

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

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

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

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

Усечение числа с плавающей точкой C++
Точность числа с плавающей точкой C++
Как получить дробную часть числа с плавающей точкой? C++
Отличить целое от числа с плавающей точкой в 32-разрядном регистре C++
Перевод из десятичной системы счисления в двоичную числа с плавающей точкой C++
C++ Ifstream считать из файла числа с плавающей точкой
C++ Неправильный вывод числа с плавающей точкой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
09.06.2012, 16:30     Вещественные числа с плавающей точкой, точность вычислений #41
Случайно наткнулся...читаю ПРОграммист №12 (март)2011 "АРИФМЕТИКА ДЛИННЫХ ЧИСЕЛ"

Добавлено через 20 минут
Преобразование сверхбольшого двоичного числа в строку-десятичное_число.
Evg
Эксперт CАвтор FAQ
17314 / 5562 / 347
Регистрация: 30.03.2009
Сообщений: 15,128
Записей в блоге: 26
09.06.2012, 17:07     Вещественные числа с плавающей точкой, точность вычислений #42
Чота у меня под линуксом .zip не открывается. Но подозреваю, что ТС'а это не очень-то и устроит, ибо навряд ли в той библиотеке есть логарифм
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
09.06.2012, 17:38     Вещественные числа с плавающей точкой, точность вычислений #43
логарифм
Ну возможно логарифм и не понадобится... все зависит от чисел..

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

Цитата Сообщение от Avazart Посмотреть сообщение
Просто как не пытался библиотеку gmp для VC++ под билдер не удалось прикрутить...
Ну тут я вряд ли что-то посоветую. Я не понимаю, как строить библиотеки под винду и как их потом использовать. Когда я к билдеру прикручивал lua, то вместо онанизма с подключением библиотеки мне намного проще показалось включить исходники lua целиком в свой проект и не мучиться
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
09.06.2012, 18:52     Вещественные числа с плавающей точкой, точность вычислений #45
включить исходники lua целиком в свой проект и не мучиться
Но исходники пришлось подправлять ручками наверное?
Evg
Эксперт CАвтор FAQ
17314 / 5562 / 347
Регистрация: 30.03.2009
Сообщений: 15,128
Записей в блоге: 26
09.06.2012, 19:54     Вещественные числа с плавающей точкой, точность вычислений #46
Цитата Сообщение от Avazart Посмотреть сообщение
Но исходники пришлось подправлять ручками наверное?
У lua всё было хорошо. Исправление вылилось только в то, что отключил часть файлов как не нужных для моего проекта. И по-моему что-то там поправил по части предупреждений, т.к. борландовский компилятор немного более болтливый, чем gcc
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
09.06.2012, 20:02     Вещественные числа с плавающей точкой, точность вычислений #47
Т.е нужно найти исходники с h,cpp-файлами и просто включать в проект?
Или найти исходники и скомпилить их и потом "только-как-то" подключать?

Просто как я понял gmp вообще под Си + Asm поэтому у меня сомнение что это возможно...
Evg
Эксперт CАвтор FAQ
17314 / 5562 / 347
Регистрация: 30.03.2009
Сообщений: 15,128
Записей в блоге: 26
09.06.2012, 20:53     Вещественные числа с плавающей точкой, точность вычислений #48
Всё зависит от конкретных исходников. Lua скомпилиось просто. Как там у gmp - хз. Возможно, что лучше сначала собрать их под mingw, затем взять все файлы, получаемые в процессе сборки (как минимум config.h) и всё это скопом утащить в виндовый компилятор. Если там gnu'шные ассемблерные вставки, то кроме gcc оно уже ничем не соберётся и придётся в борланду или vc прикручивать библиотеку в бинарном виде
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
09.06.2012, 21:27     Вещественные числа с плавающей точкой, точность вычислений #49
прикручивать библиотеку в бинарном виде
Что означает в бинарном виде??
Evg
Эксперт CАвтор FAQ
17314 / 5562 / 347
Регистрация: 30.03.2009
Сообщений: 15,128
Записей в блоге: 26
09.06.2012, 22:01     Вещественные числа с плавающей точкой, точность вычислений #50
Цитата Сообщение от Avazart Посмотреть сообщение
Что означает в бинарном виде??
Скомпилировать под mingw (т.к. библиотека gnu'шная и скорее всего рассчитана на gcc). В итоге ты получишь библиотеку в бинарном виде (т.е. собранные кода в виде файла *.lib, *.dll или чего там под виндой).
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
09.06.2012, 22:17     Вещественные числа с плавающей точкой, точность вычислений #51
т.е. собранные кода в виде файла *.lib, *.dll
Ну так уже есть собраные либы под mingw...

Но проблема в том что файлы .lib разные бывают

1.- OMF (object module format) подходят для Builder-a
2.- COFF (common object file format) подходят для VS

Но поидее можно переконверчивать - но у меня не получилось это сделать
Хотя правда я юзал зборку под VS
Evg
Эксперт CАвтор FAQ
17314 / 5562 / 347
Регистрация: 30.03.2009
Сообщений: 15,128
Записей в блоге: 26
09.06.2012, 22:27     Вещественные числа с плавающей точкой, точность вычислений #52
Ну это я не знаю. Мне эти виндузовые прибабахи как-то непонятны
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
11.06.2012, 18:47     Вещественные числа с плавающей точкой, точность вычислений #53
Ну это я не знаю. Мне эти виндузовые прибабахи как-то непонятны
Ну я вроде разобрался более или менее с этими прибабахами...удалось использовать gmp в Builder-e.

Поэтому если для YuliLa тема еще актуальна, то можно подумать о том как можно использовать gmp для решения её задачи...
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
11.06.2012, 20:39  [ТС]     Вещественные числа с плавающей точкой, точность вычислений #54
Использование gmp, хм, почему бы и нет...
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
11.06.2012, 21:38     Вещественные числа с плавающей точкой, точность вычислений #55
Тогда приведите код ф-ции Prognoz()
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
11.06.2012, 22:43  [ТС]     Вещественные числа с плавающей точкой, точность вычислений #56
Цитата Сообщение от Avazart Посмотреть сообщение
Тогда приведите код ф-ции Prognoz()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
///////////////////////////////////////////////////////////
//////П Р О Г Н О З    З Н А Ч Е Н И Й/////////////////////
///////////////////////////////////////////////////////////
double Prognoz(int kol, double pr[Nin+Nznach], int element )
{
 long  double prognozing[Nprognoz+Nin];
     /*   kol - величина скользящего окна
          pr[Nin+Nznach] - вектор начальных данных
          element - элемент из начального вектора, 
                        с которого начинается прогнозирование */
 
 //заполним значениями из pr[Nin+Nznach] промежуточный массив (размером скользящего окна) 
 for (int g=0; g<kol; g++)
     prognozing[g]=pr[Nin-kol+element+g];
 //прогнозирование kol значений
 for (int k=0;k<1;k++)
 {
     sumout=0;
     for (int i=0;i<Nhide;i++)
     {
         sum[i]=0;
         for (j=0;j<kol;j++)
             sum[i]=sum[i]+wki[j][i]*prognozing[j+k];
         sum[i]=fsyg(sum[i]-Ti[i]);
         sumout=sumout+sum[i]*wij[i];
     }
 return (sumout-Tj[0]);
 }
}
/*-------------------------------------------------*/
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
11.06.2012, 23:44     Вещественные числа с плавающей точкой, точность вычислений #57
fsyg() что такое?

Кстати странно что у вас везде double а не long double как вы говорили...
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
12.06.2012, 00:20  [ТС]     Вещественные числа с плавающей точкой, точность вычислений #58
Цитата Сообщение от Avazart Посмотреть сообщение
fsyg() что такое?

Кстати странно что у вас везде double а не long double как вы говорили...
А какая разница, если все равно не работает =)

fsyg () - сигмоидная функция активации.
Avazart
7045 / 5222 / 259
Регистрация: 10.12.2010
Сообщений: 22,960
Записей в блоге: 17
12.06.2012, 00:24     Вещественные числа с плавающей точкой, точность вычислений #59
fsyg ()
ну и где ее взять?

Нужно просто определить где именно падает точность...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2012, 00:33     Вещественные числа с плавающей точкой, точность вычислений
Еще ссылки по теме:

Округлить числа с плавающей точкой C++
Конструирование значения целого числа или числа с плавающей точкой по его дампу C++
C++ Вывод числа с плавающей точкой
Выделить подстроку представляющую запись вещественного числа с плавающей точкой C++
Перевод числа с плавающей точкой из шестнадцатиричного в двоичный вид C++

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

Или воспользуйтесь поиском по форуму:
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
12.06.2012, 00:33  [ТС]     Вещественные числа с плавающей точкой, точность вычислений #60
Цитата Сообщение от Avazart Посмотреть сообщение
ну и где ее взять?

Нужно просто определить где именно падает точность...
Отслеживала потерю точности с помощью пошагового выполнения. Точности нет после выполнения функции Prognoz (). Будь числа double или long double - результат один и тот же. Что я заметила, что если выполнять все в VS, то в Watch данные числа отображаются одинаково, но разность имеет значение 1*10^-17 в Builder'e же эта разность сразу равна 0. Выходит, что проблема именно в компиляторе билдера.
Yandex
Объявления
12.06.2012, 00:33     Вещественные числа с плавающей точкой, точность вычислений
Ответ Создать тему
Опции темы

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