2009-08-19 19 views

Respuesta

14

Al usar una clase BigInteger; hay una en las bibliotecas J # (definitivamente accesible desde C#), otra en F # (necesita probar esta), y hay implementaciones independientes such as this one en C# puro.

+0

También vale la pena señalar: existe otra implementación en el DLR para admitir los enteros de precisión indefinida de Python y Ruby, pero no he buscado ver cuál es la API pública para esa clase. –

1

Decimal tiene un rango mayor.

Hay soporte para bigInteger en .NET 4.0 pero aún no está fuera de beta.

16

¿Se puede usar la versión beta de .NET 4.0? Si es así, puede usar BigInteger.

De lo contrario, si se queda dentro de los 28 dígitos, puede usar decimal, pero tenga en cuenta que obviamente va a realizar aritmética decimal, por lo que puede necesitar redondear en varios lugares para compensar.

+0

Si alguien tiene problemas con el problema del espacio de nombre, está en System.Numerics; – Adrian

1

Existen varias bibliotecas para el cálculo con enteros grandes, la mayoría de las bibliotecas de criptografía también ofrecen una clase para eso. Consulte this para obtener una biblioteca gratuita.

0

Puede usar decimal. Es mayor que Int64.

Tiene 28-29 dígitos significativos.

7

¿Para qué desea utilizar estos números? Si está haciendo cálculos con números realmente grandes, ¿todavía necesita la precisión hasta el último dígito? De lo contrario, debería considerar usar valores de coma flotante. Pueden ser enormes, el valor máximo para el tipo doble es 1.79769313486231570E + 308, (en caso de que no esté acostumbrado a la notación científica, significa 1.79769313486231570 multiplicado por 10000000 ... 0000 - 308 ceros).

Eso debe ser lo suficientemente grande para la mayoría de aplicaciones

+0

Es sorprendente que nadie más haya mencionado esto, dado que OP no especificó enteros. –

3

BigInteger representa un entero con signo arbitrariamente grande.

using System.Numerics; 

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