2014-02-19 3 views
1

Я делаю очень простые вычисления и получаю странный результат, когда сравниваю двойные значения в if.. statement. См. Прикрепленный скриншот. enter image description hereПолучение странного результата в сравнении двойного значения iOS

Я отметил значение переменной красными маркерами. Вы можете видеть, что значение переменной totalSliceValue равно 100, и когда я сравнил значение с 100.0, он возвращает TRUE, но 100 не превышает 100.

Может кто-нибудь объяснить это, почему я получаю это. Есть ли ошибка в моем коде, или это проблема с компилятором.

Заранее благодарен!

+0

Вы уверены, что это не что-то вроде '100.0000001'? Попробуйте следующее: 'NSLog (@" totalSliceValue =% .8f ", totalSliceValue); – rmaddy

+0

@rmaddy: Я пробовал с .8f и получаю «100.00000000». –

+0

Правильно, когда я попытался с .16f и напечатал значение, оно получилось равным 100.0000000000000142. –

ответ

1

Когда это двойной, 100 часто больше 100. Или меньше. Фактически это 100.000000000127832645 или что-то в этом роде.

What Every Computer Scientist Should Know About Floating-Point Arithmetic

Another of many articles on the problem developers face when working with floats and doubles.

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

One duplicate StackOverflow question

Another duplicate

Проблема на самом деле не с компилятором, но, как вы предписывающую его - он работает в соответствии с правилами IEEE с плавающей точкой.

+0

Правильно, когда я попытался с .16f и напечатал значение, оно получилось 100.0000000000000142. –

Смежные вопросы