реклама на сайте
подробности

 
 
> IAR 4.40A, Ошибка в вычислении с плвающей зпт
mungo
сообщение Oct 27 2016, 10:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719



Приветствую, господа!
Есть типа код:
CODE
double x,x1;
x=1.09; // На самом деле результат вычилений 1.[09]
x1=.09; // аналогично, 0.[09]
x-=x1; // ожидаемо, 1
sprintf(s,"%g",x-1.0); // Вот и проблема! -1.11022е-16

У кого есть идеи, как побороть? Пробовал в другом компилере, результат, ессно, 0. Более того, эти же данные (в сыром виде) передаются на комп, там по той же формуле из тех же данных идет вычисление, и получается 0.

Компилер менять не тема - много переносить, и слишком много использовано особенностей данной версии.

Исходные данные: IAR 4.40A (4.42A), AT91SAM7X256 (ARM7), CPP.


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mungo
сообщение Oct 27 2016, 10:38
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719



Код
double x,x1;
x=1092/1001; // Оба числа целые и результаты измерения входного сигнала
x1=1/11; // Константы, указывающие на приращение по отношению измерения 1092
x-=x1; // Исключаем из измерения результат приращения измерения, являющийся погрешностью
sprintf(s,"%.14g",x-1.0); // здесь выводим абсолютную погрешность измерений, которая не должна быть больше 1 (-1)

На каждую строку специально делал вывод значений, всё вычислялось верно. А вот когда делаю -1, то видим -1.11022е-16.

Вроде куда уж подробнее...


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 27 2016, 10:46
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(mungo @ Oct 27 2016, 13:38) *
А вот когда делаю -1, то видим -1.11022е-16.

И что? Где проблема? Ожидаемая погрешность, если она отлична от нуля, будет гораздо больше. Следовательно, вот эти малые числа порядка 10^-16 следует считать строго нулём для ваших целей. Короче, ограничивайте точность при выводе результата, как вам и советовали выше.
Go to the top of the page
 
+Quote Post
mungo
сообщение Oct 27 2016, 10:50
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719



Цитата(scifi @ Oct 27 2016, 13:46) *
И что? Где проблема? Ожидаемая погрешность, если она отлична от нуля, будет гораздо больше. Следовательно, вот эти малые числа порядка 10^-16 следует считать строго нулём для ваших целей. Короче, ограничивайте точность при выводе результата, как вам и советовали выше.

Чуть выше видно, что она есть. Более того, как объяснить, что с теми же данными по таким же формулам ББ считает верно?


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 02:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016