Pregunta

El .NET Framework 4 al parecer, va a incluir una clase BigInteger. Sin embargo, me parece que no puede averiguar si es o no será inmutable. También me parece que no puede decidir si desea o no que sería una buena cosa.

La inmutabilidad tiene un montón de ventajas, especialmente para algo tan "valor similar" como un gran-int. Por otra parte, las operaciones básicas tienen que ser eficientes con el fin de realizar operaciones de alto costo, como PowerMod tan rápido como sea posible. Una adición inplace va a ser más rápido que una adición inmutable. Actualmente me estoy inclinando hacia la inmutabilidad como la mejor opción para una clase de biblioteca (pensar en cadena).

¿Alguien sabe si va a ser inmutable? ¿Cree que debería ser inmutable?

¿Fue útil?

Solución

Creo que va a ser inmutables (tengo entendido que están trayendo básicamente la implementación DLR, que es inmutable, en el núcleo).

Sí, debería ser inmutable. Debe comportarse como otros tipos de valor numérico como Int32 y doble. Tener una clase numérica mutable sería muy confuso.

Otros consejos

Creo que va a ser inmutables, y creo que esta es la única opción de diseño razonable para un tipo de 'valor'. (Al igual que el DLR, el F # Bigint también es inmutable. Es muy bueno que finalmente estamos consiguiendo este tipo en el marco de compartir todos los idiomas.)

Será inmutable. Sí, debe ser - de lo contrario, no se comportará igual que otros tipos numéricos y verá un comportamiento muy extraño si se muda de código basado entero a BigInteger código basado.

Posiblemente no debería haber un tipo mutable adicional en alguna versión futura (como StringBuilder es para String)

Tener un vistazo a la documentación (preliminares, pero oficiales) en msdn.microsoft.com/en-us/library/system.numerics.biginteger (VS.100) .aspx

  

El tipo BigInteger es un tipo inmutable que representa un arbitrariamente grande número entero cuyo valor en teoría no tiene límites superiores o inferiores. [...] Debido a que el tipo BigInteger es inmutable [...] y porque no tiene límites superiores o inferiores, un OutOfMemoryException puede ser lanzado para cualquier operación que hace que un valor BigInteger crezca demasiado.

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