Pregunta

En C #, ¿cómo se puede almacenar y calcular con números que superan significativamente el valor máximo de UInt64 (18,446,744,073,709,551,615)?

¿Fue útil?

Solución

Mediante el uso de una clase BigInteger; hay uno en las las bibliotecas J # (definitivamente accesibles desde C #), otro en F # (necesidad de probar esta uno), y hay implementaciones Autosoportados como este en C # puro.

Otros consejos

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

De lo contrario, si usted se está pegando un radio de 28 dígitos, puede utilizar decimal - pero tenga en cuenta que, obviamente, eso va a realizar operaciones aritméticas decimales, lo que puede tener para redondear en varios lugares para compensar

.

¿Qué es lo que desea utilizar estos números para? Si usted está haciendo cálculos con números muy grandes, ¿todavía necesita la precisión hasta el último dígito? Si no, usted debe considerar el uso de valores de coma flotante en su lugar. Ellos pueden ser enormes, el valor máximo para el tipo de matrimonio se 1.79769313486231570E + 308, (en caso de que no está acostumbrado a la notación científica que significa multiplicar por 1.79769313486231570 10000000 ... 0000 - 308 ceros).

Esto debería ser lo suficientemente grande para la mayoría de aplicaciones

BigInteger representa un arbitrariamente grande entero con signo.

using System.Numerics;

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

decimal tiene mayor rango.

Hay soporte para BigInteger en .NET 4.0, pero que todavía no está fuera de beta.

Hay varias bibliotecas para hacer cálculos con números enteros grandes, la mayoría de las bibliotecas de criptografía también ofrecen una clase para eso. Ver este de una biblioteca libre.

Puede utilizar decimal . Es más grande que Int64.

Tiene 28-29 dígitos significativos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top