Как вы справляетесь с числами больше, чем UInt64 (C #)

Apple предоставляет отличную пошаговую инструкцию для этого: Импорт пользовательских фреймворков на игровую площадку

16
задан Alex 19 August 2009 в 09:35
поделиться

7 ответов

Используя класс BigInteger; одна есть в библиотеках J # (определенно доступна из C #), другая - в F # (ее нужно протестировать), и есть автономные реализации , такие как эта на чистом C #.

16
ответ дан 30 November 2019 в 15:35
поделиться

Кроме того, действительно проверьте, что Вы действительно нуждаетесь в переменной с большей способностью, чем Int64 и не ссоритесь с целочисленной арифметикой C#.

, Например, этот код приведет к водосливной ошибке:

Int64 myAnswer = 20000*1024*1024;

На первый взгляд, который, могло бы казаться, был бы, потому что результат является слишком большим для Int64 переменная, но на самом деле это - потому что каждое из чисел на правой стороне формулы неявно вводится как Int32, таким образом, пространство временной памяти, зарезервированное для результата вычисления, будет Int32 размер, и это - то, что вызывает переполнение.

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

Int64 myAnswer = (Int64)20000*1024*1024;

Это обсуждено в [еще 117] деталь в этом ответе .

(я ценю, это не применяется в случае OP, но просто этот вид проблемы принес мне здесь!)

0
ответ дан 30 November 2019 в 15:35
поделиться

Можете ли вы использовать бета-версию .NET 4.0? Если это так, вы можете использовать BigInteger .

В противном случае, если вы придерживаетесь 28 цифр, вы можете использовать decimal - но имейте в виду, что, очевидно, это будет выполнять десятичную арифметику , поэтому для компенсации может потребоваться округление в различных местах.

19
ответ дан 30 November 2019 в 15:35
поделиться

Decimal имеет больший диапазон.

В .NET 4.0 есть поддержка bigInteger, но она еще не вышла из бета-версии.

1
ответ дан 30 November 2019 в 15:35
поделиться

Для чего вы хотите использовать эти номера? Если вы делаете расчеты с действительно большими числами, нужна ли вам точность до последней цифры? Если нет, вам следует подумать об использовании вместо этого значений с плавающей запятой. Они могут быть огромными, максимальное значение для типа double составляет 1,79769313486231570E + 308 (если вы не привыкли к научному представлению, это означает 1,79769313486231570, умноженное на 10000000 ... 0000 - 308 нулей).

Это должно быть большим достаточно для большинства приложений

10
ответ дан 30 November 2019 в 15:35
поделиться

Вы можете использовать десятичное . Он больше, чем Int64.

Он состоит из 28–29 значащих цифр.

0
ответ дан 30 November 2019 в 15:35
поделиться

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

1
ответ дан 30 November 2019 в 15:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: