c# - Int128 en.Net?
(10)
Necesito hacer algunas matemáticas enteras grandes. ¿Hay alguna clase o estructura que represente un número entero de 128 bits e implemente todos los operadores habituales?
Por cierto, me doy cuenta de que el decimal se puede usar para representar un int de 96 bits.
Aquí hay una implementación de Int128 en .NET: https://int128.codeplex.com/
Aquí hay una implementación de un entero grande de .net.
Biblioteca C # PCL para cálculos con números grandes como Int128 e Int256. https://github.com/inTagger/BigMath
BigInteger ahora es una parte estándar de C # y amigos en .NET 4.0. Ver: el blog ASP.NET de Gunnar Peipman . Tenga en cuenta que BigInteger no es compatible con los operadores habituales. Cada operador es una llamada a un método. Mira aquí .
Además, BigInteger será más lento que long
o int
porque implementa una aritmética de precisión arbitraria, que agrega más sobrecarga que una clase más simple que usa dos registros de 64 bits. Tiene el beneficio de estar limitado solo por la memoria y la paciencia, y eventualmente por los límites de la implementación que usa un uint para contar bits.
Creo que Mono tiene una implementación de BigInteger para la que debería poder rastrear la fuente.
Hay una clase BigInteger definida como parte de IronPython que puedes usar.
No, no hay nada en .NET <= 3.5. Espero / estoy esperando que BigInteger haga su regreso en .NET 4.0. (Fue cortado de .NET 3.5 )
Si bien BigInteger
es la mejor solución para la mayoría de las aplicaciones, si tiene cálculos numéricos críticos para el rendimiento, puede usar las Int128
completas de Int128
y UInt128
en mi biblioteca Dirichlet.Numerics . Estos tipos son útiles si Int64
y UInt64
son demasiado pequeños, pero BigInteger
es demasiado lento.
Si no le importa hacer referencia a la biblioteca J # (vjslib.dll incluida con VS de forma predeterminada) ya existe una implementación de BigInteger en .NET
using java.math;
public static void Main(){
BigInteger biggy = new BigInteger(....)
}
Está aquí en System.Numerics . "El tipo BigInteger es un tipo inmutable que representa un entero arbitrariamente grande cuyo valor en teoría no tiene límites superiores o inferiores".
var i = System.Numerics.BigInteger.Parse("10000000000000000000000000000000");