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

C++

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

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

07.06.2012, 12:31. Просмотров 14197. Ответов 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
делаю калькулятор и столкнулся с проблемой вычисления чисел с плавающей точкой...как можно реализовать подскажите

70
vxg
Модератор
3222 / 2025 / 231
Регистрация: 13.01.2012
Сообщений: 7,846
07.06.2012, 12:50 #2
видимо придется реализовать свой класс чисел с произвольным количеством знаков после запятой или взять чей-нибудь. а вообще - поработать с предметной областью: упростить, привести, сделать с расчетами что-нибудь снижающее требования к точности. люди вообще раньше атомные бомбы на линейках рассчитывали)
1
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
07.06.2012, 14:41  [ТС] #3
vxg, видимо придется писать свой класс или все-таки переписывать на Java =)
0
vxg
Модератор
3222 / 2025 / 231
Регистрация: 13.01.2012
Сообщений: 7,846
07.06.2012, 15:21 #4
для чего такая точность если это не гос тайна?
0
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
07.06.2012, 16:39  [ТС] #5
Цитата Сообщение от vxg Посмотреть сообщение
для чего такая точность если это не гос тайна?
Вычисление старшего показателя Ляпунова, с помощью нейросетевого алгоритма.
От так...
0
Gremlin
514 / 302 / 26
Регистрация: 30.07.2008
Сообщений: 607
07.06.2012, 18:06 #6
C++
1
2
    float f = 12.01234567890123456789;
    Form1->Caption = FloatToStrF( (f + 0.00000000000000000001), ffNumber, 100, 20);
1
Avazart
Эксперт С++
7574 / 5559 / 327
Регистрация: 10.12.2010
Сообщений: 24,934
Записей в блоге: 17
07.06.2012, 18:13 #7
А при чем тут Java ?
Тут скорее в том проблема что выводите не правильно... приведите пример кода...
0
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
07.06.2012, 21:05  [ТС] #8
Цитата Сообщение от Avazart Посмотреть сообщение
А при чем тут Java ?
Тут скорее в том проблема что выводите не правильно... приведите пример кода...
Я абсолютно ничего не вывожу, я просто должна найти значение логарифма разности двух чисел, а эти два числа имеют очень маленькую разность, около 1e-20. Сам алгоритм основан на том, что два числа должны иметь очень маленькое расхождение. Поэтому проблема не в считывании и не выводе.
0
Avazart
Эксперт С++
7574 / 5559 / 327
Регистрация: 10.12.2010
Сообщений: 24,934
Записей в блоге: 17
07.06.2012, 21:12 #9
!!!!!
приведите пример кода...
0
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
07.06.2012, 21:32  [ТС] #10
Цитата Сообщение от Avazart Посмотреть сообщение
!!!!!
Если вы конечно сможете что-то понять =)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//////////////////////////////////////////////////////
//////О Ц Е Н К А    А Р Б И Т Р А////////////////////
//////////////////////////////////////////////////////
AlgLyap(int otkl,int iter)
/*otkl - отклонение -16*/
{
  double d0;
  long double xh_1, xh_h_1, E;
 
   d0=pow(10, otkl);
   do {
      h=0;
      NS(iter,Nznach);
      for (i=0; i<Nin; i++)
      {
         xh[i]=etalon[i+h];
      }
      for (i=0; i<Nin-1; i++)
      {
         xh_h[i]=xh[i];
      };
      xh_h[Nin-1]=xh[Nin-1]+d0;
      xh_1= Prognoz(Nin,xh,h);
      xh_h_1=Prognoz(Nin, xh_h,h);
      xh[Nin]=xh_1;
      xh_h[Nin]=xh_h_1;
         arbitr[h]=log(fabs(xh_1-xh_h_1));
      iter++;
   } while (arbitr[h] < -200);
   h++;
   iter=0;
   do {
      xh_1=Prognoz(Nin,xh,h+iter); //прогнозирование на 1 значение вперед
      xh_h_1=Prognoz(Nin, xh_h,h+iter);
      xh[Nin+h]=xh_1;
      xh_h[Nin+h]=xh_h_1;
         arbitr[h]=log(fabs(xh_1-xh_h_1));
      if (arbitr[h]< -200)
      {
         h--;
         iter++;
      };
      h++;
      flag=true;
      if ((arbitr[h-1]>0) || (h>=etalon.size()/Nznach - Nznach))
      {
    flag=false;
      };
   } while(flag==true);
   return 0;
}
0
Avazart
Эксперт С++
7574 / 5559 / 327
Регистрация: 10.12.2010
Сообщений: 24,934
Записей в блоге: 17
07.06.2012, 21:52 #11
Уже с самого начала непонятно как ф-ция AlgLyap() возвращает значения?
0
Evg
Эксперт CАвтор FAQ
18884 / 6840 / 498
Регистрация: 30.03.2009
Сообщений: 19,260
Записей в блоге: 30
07.06.2012, 22:16 #12
Код
$ gcc -xc /dev/null -dM -E | grep LDBL
...
#define __LDBL_EPSILON__ 1.08420217248550443401e-19L
...
Т.е. на интеловском 80-битном long double значение эпсилон 10^-19, что, насколько я понимаю, недостаточно для текущей постановки задачи
0
Avazart
Эксперт С++
7574 / 5559 / 327
Регистрация: 10.12.2010
Сообщений: 24,934
Записей в блоге: 17
07.06.2012, 22:30 #13
А погрешность возникает уже при 10^-15 как я понимаю
0
Миниатюры
Вещественные числа с плавающей точкой, точность вычислений  
YuliLa
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
07.06.2012, 22:42  [ТС] #14
Evg, вот именно =(

Avazart, там в формуле где log(fabs(x1-x2)) под логарифмом появляется недопустимый ноль, поэтому проблема в разности чисел, она настолько мала, что x1-x2=0, а в самом деле там должно быть 1*10^-18
0
Avazart
Эксперт С++
7574 / 5559 / 327
Регистрация: 10.12.2010
Сообщений: 24,934
Записей в блоге: 17
07.06.2012, 23:00 #15
Мда самомому интересно стало...
Где то уже проскакивала тема с точностью вычислений... если не подводит память там еще была ссылка на литературу...
0
07.06.2012, 23:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2012, 23:00
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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