Enteros grandes en C#

Resuelto Matthew Scharley asked hace 16 años • 13 respuestas

Actualmente estoy tomando prestado java.math.BigIntegerde las bibliotecas J# como se describe aquí . Como nunca antes había usado una biblioteca para trabajar con números enteros grandes, esto parece lento, del orden de 10 veces más lento, incluso para ulongnúmeros de longitud. ¿Alguien tiene bibliotecas mejores (preferiblemente gratuitas) o este nivel de rendimiento es normal?

Matthew Scharley avatar Oct 07 '08 07:10 Matthew Scharley
Aceptado

A partir de .NET 4.0, puede utilizar la clase System.Numerics.BigInteger. Consulte la documentación aquí: http://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

Otra alternativa es la clase IntX .

IntX es una biblioteca de números enteros de precisión arbitraria escrita en C# 2.0 puro con implementación rápida de algoritmos de multiplicación/división O(N * log N). Proporciona todas las operaciones básicas con números enteros como suma, multiplicación, comparación, desplazamiento bit a bit, etc.

Davorin avatar Apr 27 '2009 19:04 Davorin

F#También se envía con uno. Puedes conseguirlo en Microsoft.FSharp.Math.

Steve Severance avatar Jan 31 '2009 13:01 Steve Severance

La System.Numerics.BigIntegerclase en .NET 4.0 se basa Microsoft.SolverFoundation.Common.BigIntegeren Microsoft Research.

La clase de la Fundación Solver BigIntegerparece muy eficaz. No estoy seguro de bajo qué licencia se publica, pero puede obtenerla aquí (descargue e instale Solver Foundation y busque Microsoft.Solver.Foundation.dll).

Rasmus Faber avatar Jun 19 '2009 17:06 Rasmus Faber

Creo que podría optimizar la implementación si realiza todas las operaciones en BigInts que devolverán resultados más pequeños que un tipo nativo (por ejemplo, int64) en los tipos nativos y solo maneja la matriz grande si va a desbordarse.

editar Esta implementación en codeproject parece solo 7 veces más lenta... Pero con la optimización anterior puede lograr que funcione casi de manera idéntica a los tipos nativos para números pequeños.

Sam Saffron avatar Oct 07 '2008 00:10 Sam Saffron