The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Помогите! Как избавится от ошибок вычислений процессора?"
Отправлено ACCA, 06-Мрт-05 09:34 
Тезис: у тебя ошибка в семантике, а ты пытаешься исправлять малозначительные погрешности.

Предыдущее утверждение сложно для понимания, тебе придётся много подумать о том, что такое "действительное число", "принятие решения" и "событие".


>или 0.500000001 или 0.499999999! В случае, если с=0.49999999 программа работает не
>так как хотелось бы. Ужас!
>Пожалуйста, подскажите как с этим справлсяться?

Переписать программу, чтобы она не была чувствительна к ошибке вычисления. Это единственный способ решения проблемы.

Допустим путём подбора хитрой функции округления для некоторых операций ты сможешь получать точные 0.5 на своём 32-разрядном однопроцессорном компьютере.

Нет никакой уверенности, что функция станет работать на 8 разрядных машинах без сопроцессора и со слабенькой математической библиотекой, равно как нет уверенности, что это будет работать на 128-разрядном суперкомпьютере.

Как только ты стал считать с плавающей точкой, забудь про строгие равенства и чёткие границы. Если 0.5 настолько критично, считай в целых числах:

int a = 1;
int b = 2;

if (a*2 > b) {
...
}

В самых тяжёлых случаях считай с остатком, это позволит не накапливать ошибки округления.


P.S.

Пример с калькулятором. Берём TI-30X, берём квадратный корень из 2.

Возводим его в квадрат = 2, ещё раз = 4, ещё раз = 16, ещё раз = 256, ещё раз = 65535.99999

Целые числа на самом деле были не так целы, сработал хитрый алгоритм округления. Но в конце концов ошибка округления вылезла наружу.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру