2009-08-19 1 views

ответ

14

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

+0

Также стоит отметить - в DLR есть еще одна реализация для поддержки неопределенных целых чисел Python и Ruby, но я не смотрел, что такое открытый API для этого класса. –

1

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

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

16

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

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

+0

Если у кого-либо возникли проблемы с проблемой пространства имен, он находится под именем System.Numerics; – Adrian

1

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

0

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

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

7

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

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

+0

Удивительно, что никто не упомянул об этом, учитывая, что OP не задавал целые числа. –

3

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

using System.Numerics; 

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