Трудно работать с поплавками - PullRequest
0 голосов
/ 31 декабря 2010

Я не совсем уверен, как назвать название.

Я проверяю, совпадают ли значения двух чисел.Если я использую printf() или NSLog(), значения возвращают 0,750000.Однако строка типа if (value1 == value2) { return TRUE; } не работает.Я могу предположить, что в действительности значения с плавающей запятой находятся за 7 десятичными разрядами, и printf() / NSLog() не может возвращать значение, превышающее 7 десятичных знаков.

Я попытался найти в Google способ посмотреть, как я могу сократить число с плавающей запятой до меньшего числа десятичных разрядов или просто преобразовать его в другой тип данных, но пока мне не повезло.

Ответы [ 3 ]

4 голосов
/ 31 декабря 2010

Возможно, вы захотите взглянуть на float.h (http://www.gnu.org/software/libc/manual/html_node/Floating-Point-Parameters.html) для определения произвольного определения эпсилона. В частности, FLT_EPSILON и FLT_DIG.

1 голос
/ 31 декабря 2010

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

  #define EPSILON 0.0001

  if (fabs(floatA - floatB) < EPSILON) { retun TRUE; }

fabs(x) возвращает абсолютное значение double x .

Вы также можете использовать double вместо float тип данных (double в два раза больше float).

0 голосов
/ 31 декабря 2010

Когда вы сравниваете числа с плавающей запятой, вам нужно использовать допуск:

if (Abs(value1 - value2) < epsilon)
{
}

, где epsilon - это значение, например, 0,000001

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