Estoy usando Java y tengo que trabajar con números de mayor longitud (que son 64 bits). ¿Qué debería usar? ¿Cuál es el tamaño de BigInteger en java?Números grandes que requieren representación de más de 64 bits
Respuesta
Como mencionó en su pregunta, debe usar BigInteger.
Pueden ser tan grandes como lo necesite, hasta que se quede sin memoria.
está buscando ya sea para la clase BigDecimal o si solo necesita enteros, que BigInteger. Su precisión arbitraria, por lo que el tamaño cambia en función de cuán grandes son los números que ingresa
¿Cuál es el tamaño de BigInteger en java?
Eso es un poco complicado. El problema es que no existe una especificación clara del límite en los javadocs.
La clase utiliza un
int[]
para representar la magnitud. Esto significa que podría representar números hasta((2^32)^(2^31 - 1)
.La API tiene un método que devuelve el número como una matriz de bytes de complemento a 2. El límite para esto es
((2^8)^(2^31 - 1)
.La API tiene otro método que devuelve el tamaño del número en bits ... como
int
. Esto implica un límite de2^(2^31 - 1)
o quizás2^(2^32)
.
En la práctica, estos números son todos tan grande que se quiere probablemente topado con límites de espacio de almacenamiento dinámico (o límites de rendimiento de la CPU) primero.
el problema es que tengo que averiguar la raíz cuadrada de un número.
Debería poder encontrar un algoritmo para calcular las raíces cuadradas en sus libros de texto de matemáticas de pregrado (o Wikipedia). Codificarlo debería ser una tarea simple.
(me gustaría señalarle al ejemplo de código, excepto que esta huele a "tareas", y yo no confían en su totalidad el código que he encontrado.)
No se olvide que la mayoría de enteros tiene una raíz cuadrada irracional ...
Para encontrar una raíz cuadrada de un BigInteger, debe hacer una búsqueda en Google con las respuestas "-StackOverflow" omitidas. https://www.google.com/search?q=java+extract+root+bignum&ie=utf-8&oe=utf-8#q=java+root+BigInteger+-stackoverflow.com+-stackexchange.com produce el primer enlace a http://faruk.akgul.org/blog/javas-missing-algorithm-biginteger-sqrt/ Aquí hay un algoritmo. Se supone que Java es "escribir una vez, usar en todas partes". Bueno, algunos usuarios de SO creen que debes reinventar la rueda. Pídales un módulo que respondan "huele a tarea, hágalo usted mismo". Y sí, BigInteger está medio cocido. No puede hacer logaritmos o raíces fuera de la caja. Es extremadamente lento El algoritmo se da a continuación.
BigInteger sqrt(BigInteger n) {
BigInteger a = BigInteger.ONE;
BigInteger b = new BigInteger(n.shiftRight(5).add(new BigInteger("8")).toString());
while(b.compareTo(a) >= 0) {
BigInteger mid = new BigInteger(a.add(b).shiftRight(1).toString());
if(mid.multiply(mid).compareTo(n) > 0) b = mid.subtract(BigInteger.ONE);
else a = mid.add(BigInteger.ONE);
}
return a.subtract(BigInteger.ONE);
}
- 1. Bits representación de números negativos
- 2. ¿Hay memset() que acepta números enteros más grandes que char?
- 3. ¿Son los programas de 64 bits más grandes y más rápidos que las versiones de 32 bits?
- 4. División de números grandes
- 5. ¿Utiliza Lua números enteros de 64 bits?
- 6. Agregar números de 64 bits con aritmética de 32 bits
- 7. Quicksort ordena números más grandes más rápido?
- 8. impresión de bits de representación de números en python
- 9. Arrays de JavaScript: ¿números enteros de 64 bits?
- 10. Agregando dos números de 64 bits en el ensamblaje
- 11. Potencia de módulo de números grandes
- 12. ¿Aplicación de 32 bits o de 64 bits en el sistema operativo de 64 bits?
- 13. Factorización de números grandes
- 14. Haskell tipo numérico de 64 bits
- 15. Aplicaciones Java de 64 bits: ¿Se requiere un SO de 64 bits, un JRE de 64 bits y una Aplicación de 64 bits?
- 16. cómo multiplicar dos números grandes (digamos 512 bits) en java
- 17. En sistemas de 64 bits, ¿una columna de 32 bits ocupa menos espacio que uno de 64 bits?
- 18. 64 bits por división de 32 bits
- 19. Cómo generar números aleatorios grandes C
- 20. Tipos para números grandes
- 21. La máquina virtual de 32 o 64 bits es más rápida en la máquina de 64 bits (vmware)
- 22. Pregunta Quicktime de 64 bits
- 23. Tamaño de dll de 64 bits 50% más grande que 32-bit
- 24. ¿Cómo sacar los números más grandes de una gran cantidad de números?
- 25. 64 bits ODBC Excepción
- 26. IEEE-754 Doble (coma flotante de 64 bits) vs. Largo (Entero de 64 bits) Revisited
- 27. Preservar números grandes
- 28. Representación de los números flotantes de Java como números hexadecimales
- 29. Ventajas de rendimiento de 64 bits
- 30. ¿Cómo puedo compilar mi aplicación de 64 bits para que sea más rápida o mejor?
el problema es que tengo que averiguar la raíz cuadrada de un número.Pero no hay una biblioteca incorporada para encontrar la fuente cuadrada de un entero de error. – Ashwin
@Ashwin: Espere un minuto: si no se garantiza que la raíz cuadrada sea decimal, ¿por qué no está utilizando simplemente un doble? –
@HovercraftFullOfEels: Como dije, mi número supera los 64 bits, donde el tamaño del doble es 64 bits – Ashwin