Умножьте большие числа в объективе-c - PullRequest
2 голосов
/ 10 февраля 2011

Я попытался умножить большие целые числа (также попытался удвоить) в xcode.Я использовал NSLog для отслеживания ошибок в моих вычислениях (простые вычисления) и заметил, что когда я умножаю переменные с большими значениями, такими как (я искал их с помощью NSLog): 31536000 * 91 = 2869776000, я получаю 1610612736, что неверно.Что я делаю не так?

/ D

Ответы [ 3 ]

1 голос
/ 10 февраля 2011

Какой тип данных вы используете для своих номеров? Если это NSInteger или что-то в этом роде, оно близко к стандартному int, поэтому у него есть некоторые ограничения.

Например, в стандартной 64-битной архитектуре вы можете объявить long long int, который позволяет вам иметь 64-битное целое число. Если вашему умножению требуется больше места, самые левые биты могут быть усечены, что меняет ваш результат.

Вы также можете использовать некоторое long double, которое позволяет обрабатывать 80-битные числа, что увеличивает двойную точность, но все еще теряет точность для больших чисел.

0 голосов
/ 10 февраля 2011

Я пытался использовать длинную longm, которая изначально не работала, но когда я использовал спецификатор формата строки% 11u в моем NSLog, я получил правильный вывод из моих вычислений!

Большое спасибо за ответы!

/ D

0 голосов
/ 10 февраля 2011

Необходимо убедиться, что вы используете правильный спецификатор формата строки при выводе результатов. Для больших чисел вы, вероятно, захотите использовать %lld (или %llx) для long long или %llu (или, опять же, %llx) для unsigned long long.

Какой спецификатор формата строки вы используете для вывода значения?

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