Страница 1 из 1

Точность вычислений и преобразований double.

Добавлено: 15 окт 2009, 14:47
like-nix
Всем привет!

Вопрос точности вычислений и преобразований double.

Объясните пожалуйста следующее:

Арифметические операции:

Код: Выделить всё

double test_k = 1495.0 * 0.00001;
test_k = 0.014950000000000001

Преобразования:

Код: Выделить всё

  char buffer [50];
  double a=5.38986;
  sprintf(buffer, "%f", a);
  sscanf(buffer, "%lf", &test_k);
test_k = 5.3898599999999997

В обоих случаях получаем погрешность. Как сделать так чтобы не было погрешности в вычислениях?
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Важное дополнение, достаточно будет точности в 4 разряда.

Re: Точность вычислений и преобразований double.

Добавлено: 15 окт 2009, 15:48
Romeo
Один из вариантов - округлять до какого-то знака.

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

Вот хорошая статья на эту тему:
http://rsdn.ru/article/alg/float.xml

Re: Точность вычислений и преобразований double.

Добавлено: 16 окт 2009, 06:09
atavin-ta
Источник твоего глюка в том, что ты имеешь ограниченную точность двоичного представления дроби и пытаешься перевести её в десятичную. Отсюда и погрешность младшего разряда десятичного представления.