точность машины - PullRequest
       18

точность машины

2 голосов
/ 02 февраля 2010

Интересно, есть ли что-то вроде eps для представления значения точности машины в C ++? Могу ли я использовать его как наименьшее положительное число, которое может представлять двойное число? Можно ли использовать 1.0 / eps в качестве максимального положительного числа, которое может представлять двойное число? Где я могу найти eps в стандартных библиотеках C ++ и C?

Спасибо и всего наилучшего!


UPDATE:

Для моей цели я бы хотел вычислить вес как обратную величину расстояния для чего-то вроде интерполяции весов с обратной величиной (http://en.wikipedia.org/wiki/Inverse_distance_weighting).

double wgt = 0, wgt_tmp, result = 0;
for (int i = 0; i < num; i++)
{
   wgt_tmp = 1.0/dist[i];
   wgt += wgt_tmp;
   result += wgt_tmp * values[i];
}
results /= wgt;

Однако расстояние может быть 0, и мне нужно сделать вес, подходящий для вычислений. Если есть только одно расстояние dist [i] равно 0, я бы хотел, чтобы соответствующие значения [i] были доминирующими. Если есть несколько расстояний 0, я бы хотел, чтобы их значения в равной степени способствовали получению результата. Есть идеи, как это реализовать?

Ответы [ 3 ]

3 голосов
/ 02 февраля 2010

Используя #include <limits> у вас есть

Небольшое положительное значение = std::numeric_limits<float>::denorm_min()

Наибольшее положительное значение = std::numeric_limits<float>::max()

Очевидно, что это относится и к другим типам.

См. numeric_limits

И нет, обратная сторона наименьшего положительного значения не равна наибольшему.

3 голосов
/ 02 февраля 2010

Просто ищу числовые ограничения информацию?

Ссылка показывает, как найти эпсилон, денормализованный мин и т. Д., Используя стандартную библиотеку C ++. Этого нет эквивалента в стандартной библиотеке C. Вам нужно будет их вычислить самостоятельно (например, в статье в Википедии о «машинном эпсилоне») ...

Что касается алгоритма, он не может вам помочь, и это не было частью вашего первоначального вопроса, извините.

2 голосов
/ 02 февраля 2010

Это полностью зависит от точности, которую вы хотите получить от своих чисел, максимальное значение в двойном значении очень велико, но страдает от огромных ошибок округления. Если вам нужна точность 1e-3, например, вам нужно как минимум 10 бит после плавающей запятой, что означает, что у вас не должно быть никакого показателя больше числа битов в мантиссе минус 10, в случае двойного, 52 - 10 = 42, оставляя вам максимум около 4e12 и соответствующий минимум около 2,5e-13.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...