С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/109: Рейтинг темы: голосов - 109, средняя оценка - 4.71
 Аватар для YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71

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

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

Студворк — интернет-сервис помощи студентам
Работаю над проектом, требующим большую точность вычисления вещественных чисел.
Решила использовать long double в надежде получить точность побольше.
Столкнулась с тем, что C++ Builder просто отказывается давать желаемую точность.
Точность необходима до 10^20. То есть до 20 числа после запятой.
Подскажите пожалуйста как решить данную проблему.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.06.2012, 12:31
Ответы с готовыми решениями:

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

Максимальная точность для чисел с плавающей точкой
Суть поставленной задачи: дан вектор от 10_000 до 100_000 элементов, нужно проходить по вектору, брать два первых значения которые должны...

Представить вещественные числа в четырёхбайтовой ячейке памяти в формате с плавающей точкой
Пожалуйста помогите Представить вещественные числа в четырёхбайтовой ячейке памяти в формате с плавающей точкой. a) 0,5; б) 25,12; в)...

70
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.06.2012, 16:30
Студворк — интернет-сервис помощи студентам
Случайно наткнулся...читаю ПРОграммист №12 (март)2011 "АРИФМЕТИКА ДЛИННЫХ ЧИСЕЛ"

Добавлено через 20 минут
https://www.cyberforum.ru/post2824768.html
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2012, 17:07
Чота у меня под линуксом .zip не открывается. Но подозреваю, что ТС'а это не очень-то и устроит, ибо навряд ли в той библиотеке есть логарифм
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.06.2012, 17:38
логарифм
Ну возможно логарифм и не понадобится... все зависит от чисел..

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

Цитата Сообщение от Avazart Посмотреть сообщение
Просто как не пытался библиотеку gmp для VC++ под билдер не удалось прикрутить...
Ну тут я вряд ли что-то посоветую. Я не понимаю, как строить библиотеки под винду и как их потом использовать. Когда я к билдеру прикручивал lua, то вместо онанизма с подключением библиотеки мне намного проще показалось включить исходники lua целиком в свой проект и не мучиться
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.06.2012, 18:52
включить исходники lua целиком в свой проект и не мучиться
Но исходники пришлось подправлять ручками наверное?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2012, 19:54
Цитата Сообщение от Avazart Посмотреть сообщение
Но исходники пришлось подправлять ручками наверное?
У lua всё было хорошо. Исправление вылилось только в то, что отключил часть файлов как не нужных для моего проекта. И по-моему что-то там поправил по части предупреждений, т.к. борландовский компилятор немного более болтливый, чем gcc
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.06.2012, 20:02
Т.е нужно найти исходники с h,cpp-файлами и просто включать в проект?
Или найти исходники и скомпилить их и потом "только-как-то" подключать?

Просто как я понял gmp вообще под Си + Asm поэтому у меня сомнение что это возможно...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2012, 20:53
Всё зависит от конкретных исходников. Lua скомпилиось просто. Как там у gmp - хз. Возможно, что лучше сначала собрать их под mingw, затем взять все файлы, получаемые в процессе сборки (как минимум config.h) и всё это скопом утащить в виндовый компилятор. Если там gnu'шные ассемблерные вставки, то кроме gcc оно уже ничем не соберётся и придётся в борланду или vc прикручивать библиотеку в бинарном виде
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.06.2012, 21:27
прикручивать библиотеку в бинарном виде
Что означает в бинарном виде??
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2012, 22:01
Цитата Сообщение от Avazart Посмотреть сообщение
Что означает в бинарном виде??
Скомпилировать под mingw (т.к. библиотека gnu'шная и скорее всего рассчитана на gcc). В итоге ты получишь библиотеку в бинарном виде (т.е. собранные кода в виде файла *.lib, *.dll или чего там под виндой).
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.06.2012, 22:17
т.е. собранные кода в виде файла *.lib, *.dll
Ну так уже есть собраные либы под mingw...

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

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

Но поидее можно переконверчивать - но у меня не получилось это сделать
Хотя правда я юзал зборку под VS
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2012, 22:27
Ну это я не знаю. Мне эти виндузовые прибабахи как-то непонятны
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.06.2012, 18:47
Ну это я не знаю. Мне эти виндузовые прибабахи как-то непонятны
Ну я вроде разобрался более или менее с этими прибабахами...удалось использовать gmp в Builder-e.

Поэтому если для YuliLa тема еще актуальна, то можно подумать о том как можно использовать gmp для решения её задачи...
1
 Аватар для YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
11.06.2012, 20:39  [ТС]
Использование gmp, хм, почему бы и нет...
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.06.2012, 21:38
Тогда приведите код ф-ции Prognoz()
0
 Аватар для YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
11.06.2012, 22:43  [ТС]
Цитата Сообщение от 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]);
 }
}
/*-------------------------------------------------*/
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.06.2012, 23:44
fsyg() что такое?

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

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

fsyg () - сигмоидная функция активации.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.06.2012, 00:24
fsyg ()
ну и где ее взять?

Нужно просто определить где именно падает точность...
0
 Аватар для YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
12.06.2012, 00:33  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
ну и где ее взять?

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

В текстовом файле записаны вещественные числа с плавающей точкой. Преобразовать файл, заменив каждое число, округленным
Задача: В текстовом файле записаны вещественные числа с плавающей точкой. Преобразовать файл, заменив каждое число, округленным до десятых...

Преобразование чисел с плавающей точкой в числа с фиксированной точкой
Здравствуйте, подскажите пожалуйста как заменить вещественные числа с плавающей точкой, числами округленными до десятых, записанными в...

Точность вычислений в double (Обрезание числа)
Здравствуйте! Дело в том, что мне необходимо выводить большие числа с большим количеством знаков после запятой. Однако и double и float...

Числа с плавающей точкой
Здравствуйте, создаю я, значит, батник. И тут столкнулся с такое проблемой: при присвоении переменной числа с плавающей точкой вылетает...

Числа с плавающей точкой
Как отделить целую часть и дробную? Например имеем число 12.54 число 12 должно бить записано в textbox1 а число 54 в textbox2.


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru