Ответ 1
Используя класс BigInteger; там один в библиотеках J # (определенно доступный из С#), другой в F # (нужно проверить это), и существуют автономные реализации такие как этот в чистом С#.
В С#, как можно хранить и вычислять с числами, которые значительно превышают максимальное значение UInt64 (18 446 744 073 709 551 615)?
Используя класс BigInteger; там один в библиотеках J # (определенно доступный из С#), другой в F # (нужно проверить это), и существуют автономные реализации такие как этот в чистом С#.
Можете ли вы использовать бета-версию .NET 4.0? Если это так, вы можете использовать BigInteger
.
В противном случае, если вы придерживаетесь в пределах 28 цифр, вы можете использовать decimal
- но имейте в виду, что, очевидно, что будет выполнять десятичную арифметику, поэтому вам может потребоваться округлить в разных местах, чтобы компенсировать.
Для чего вы хотите использовать эти цифры? Если вы делаете вычисления с действительно большими числами, вам все еще нужна точность до последней цифры? Если нет, вы должны использовать значения с плавающей запятой. Они могут быть огромными, максимальное значение для двойного типа - 1.79769313486231570E + 308 (в случае, если вы не привыкли к научной нотации, это означает 1.79769313486231570, умноженное на 10000000... 0000 - 308 нулей).
Это должно быть достаточно большим для большинства приложений.
BigInteger представляет собой произвольно большое целое число со знаком.
using System.Numerics;
var a = BigInteger.Parse("91389681247993671255432112000000");
var b = new BigInteger(1790322312);
var c = a * b;
Десятичный имеет больший диапазон.
Существует поддержка для BigInteger в .NET 4.0, но это все еще не из бета-версии.
Существует несколько библиотек для вычислений с большими целыми числами, большинство библиотек криптографии также предлагают для этого класс. См. this для бесплатной библиотеки.
Вы можете использовать decimal. Он больше, чем Int64.
Он имеет 28-29 значащих цифр.