Pregunta

Las operaciones numéricas que hacemos en nuestros programas están limitados por el número de bytes que especifica un idioma para un tipo de datos determinado (o quizás soportes de hardware). Decir que puedo utilizar para hacer cálculos de enteros en mi cheque de pago (incluso "corto" es más que suficiente para ganar un año !!!;)), pero no puede hacer lo mismo con la riqueza de Bill Gates. Por lo tanto, vamos a por cosas como mucho tiempo y esas cosas. Pero no estamos todavía a merced del número de bits que se dan a nosotros.

Así que, ¿qué tal si imitara a operaciones numéricas en el software? Decir una clase que los resúmenes y pueden hacer operaciones numéricas de números con dígitos de 1000 ... Por supuesto, será demasiado demasiado lento, pero no estoy mucho más preocupado por la complejidad, pero mirando más a tan sólo computabilidad ...

Tal vez se puede utilizar para calcular PI a la precisión 1000 dígitos en unos meses o un Mersenne en pocos años y llevar a casa $ 100K;)

Así que ahora mi pregunta, 1) ¿Hay ya alguna de estas bibliotecas que hacer este tipo de cosas por ahí (en C / C ++). 2) Si voy sobre la implementación de una, ¿tienes alguna sugerencia para mí? (+, -, *, /,%, <<, >> operaciones deben suficiente supongo)


PS:

  1. Soy programador de C / C ++.

  2. Y esta limitación comenzó me molesta de mis días de escuela.

¿Fue útil?

Solución

Tales tipos de datos son conocidos como números de precisión arbitraria. En Java, hay clases el BigDecimal y BigInteger que manejan las operaciones básicas (+, -, *, /) en el nivel dígitos. No tienen ninguna limitación de tamaño 'integrado'. Ellos son en realidad no es tan lento y se utilizan en una gran cantidad de dominios del mundo real.

C / C ++ no lo tiene incorporado pero hay una gran cantidad de bibliotecas por ahí. Ver lista aquí: http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries

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