Как перенести это удваивается в NSDecimalNumber? - PullRequest
0 голосов
/ 26 августа 2009

У меня есть несколько двойников, которые я хочу портировать в NSDecimalNumber, потому что у меня получаются слишком плохие арифметические ошибки с плавающей точкой.

Это:

double one = 0.0000001;
double two = 1000000000.0000001;

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

Позвольте мне попробовать:

NSDecimalNumber *one = [NSDecimalNumber decimalNumberWithMantissa:1 exponent:-7 isNegative:NO];

NSDecimalNumber *two = [NSDecimalNumber decimalNumberWithMantissa:10000000000000001 exponent:-7 isNegative:NO];

Я чувствую, что это неправильно.Я мог только догадываться.Документация не дает много информации об этом.Но, насколько я понимаю, «мантисса» является целым числом, а показатель степени указывает, где должна быть плавающая точка, путем добавления нулей.Вероятно, это также неправильно; -)

Я видел некоторые фрагменты кода, где люди просто ввели CGFloat как мантиссу и указали 0 в качестве показателя, но я могу только догадываться, что они намеревались, поэтому я не могупросто сделайте это так же, не понимая этого.

Есть идеи?

1 Ответ

0 голосов
/ 26 августа 2009

Начиная с ссылки класса, номера представлены как mantissa x 10^exponent.

Итак, вы совершенно правы в своих предположениях.

Ваш номер - это прежде всего mantissa. Десятичная точка стоит после вашего числа и сдвигается вправо exponent раз (если показатель степени положительный, нули будут добавлены, так как точки остаются с правой стороны). В конце перед вашим номером будет поставлен знак минус в соответствии с флагом isNegative.

Так, например, если у вас есть 123 * 10 ^ (-3), он начинается с 123., идет от 12.3 и 1.23 до 0.123, где десятичная точка равна трем цифрам, как и прежде

Обратите внимание, что этот тип также имеет ограничения. ссылка показывает их:

[...] где мантисса - десятичное целое число до 38 digits long, а экспонента - целое число от –128 до 127

Может быть, Википедия способна лучше объяснить научную запись чисел, и это именно то, что вы должны использовать здесь: -)

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