Проблема с добавлением двух двойных значений в цель c - PullRequest
1 голос
/ 23 сентября 2011

Я программирую приложение для iphone и ipad, и моя программа требует добавления двух двойных значений, чтобы получить одно двойное значение. Проблема в том, что когда одно из двойных значений достаточно велико (например, 2 ^ 100), а другое очень мало, например, 1 или 2, результат добавления этих двух двойных значений неверен или даже не добавляет сложность. , Кто-нибудь знает, почему это так и есть ли способ обойти это? Спасибо.

Ответы [ 2 ]

6 голосов
/ 23 сентября 2011

Это не имеет ничего общего с obj-c. double - это 64-битный тип данных, в котором хранится значение с плавающей запятой.В десятичной дроби может содержать около 15,955 цифр точности.Тем не менее, ваш номер 2 ^ 100 имеет около 30 десятичных цифр.Поэтому, если вы попытаетесь добавить к нему что-нибудь до 1 квадриллиона, вы обнаружите, что это дополнение не работает, поскольку оно выходит за пределы диапазона точности вашего числа., вы можете использовать NSDecimalNumber , который будет содержать до 38 десятичных цифр точности.

1 голос
/ 23 сентября 2011

Это хорошая статья для всех, кто имеет дело с числами с плавающей запятой:

http://en.wikipedia.org/wiki/Floating_point

Ситуация, которую вы описываете, полностью нормальна и является естественным результатом работы плавающей запятойна компьютерах.

...