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