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

В С#, как можно хранить и вычислять с числами, которые значительно превышают максимальное значение UInt64 (18 446 744 073 709 551 615)?

Ответы

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

BigInteger представляет собой произвольно большое целое число со знаком.

using System.Numerics;

var a = BigInteger.Parse("91389681247993671255432112000000");
var b = new BigInteger(1790322312);
var c = a * b;

Ответ 5

Десятичный имеет больший диапазон.

Существует поддержка для BigInteger в .NET 4.0, но это все еще не из бета-версии.

Ответ 6

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

Ответ 7

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

Он имеет 28-29 значащих цифр.