Емкость уинт64_т? - PullRequest
       1

Емкость уинт64_т?

6 голосов
/ 22 июля 2010

У меня маленькая проблема.По сути, код:

uint64_t myInteger = 98930 * 98930;
NSLog(@"%qu", myInteger);

... просто ошибается.Я получаю «1197210308» в качестве вывода, что, очевидно, неверно.Почему это происходит?Не может быть, чтобы uint64_t был слишком маленьким, так как они, очевидно, доходят до 18 с половиной квинтиллионов .У кого-нибудь есть идеи?

Ответы [ 3 ]

9 голосов
/ 22 июля 2010

Попробуйте ввести первое число, чтобы операция выполнялась с использованием этого типа:

uint64_t myInteger = (uint64_t)98930 *98930;
8 голосов
/ 22 июля 2010

98930 - это int, поэтому вы умножаете два int с, что дает int.Затем вы назначаете uint64_t, но уже слишком поздно, вы уже потеряли точность.Убедитесь, что один из операндов имеет тип uint64_t, так что другой будет приведен к этому типу, а умножение будет выполнено как uint64_t умножение.

2 голосов
/ 22 июля 2010

Я мало что знаю о target-C, но, делая то же самое в C, целочисленные продвижения останавливаются на целочисленном ранге, поэтому вы получаете переполнение целых чисел.Попробуйте:

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