Domanda

Il modo più efficace per potenze di codice di due è a poco spostando dei numeri interi.

1 << n mi dà 2^n

Tuttavia, se ho un numero che è più grande del più grande valore consentito in un int o un long, cosa posso usare per manipolare in modo efficiente potenze di 2?

(Ho bisogno di essere in grado di eseguire operazioni di addizione, moltiplicazione, divisione e modulo del numero)

È stato utile?

Soluzione

E 'questo quello che ti serve?

BigInteger hugeNumber = BigInteger.ONE.shiftLeft(n);

Questo è il risultato quando n = 1000,

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

Altri suggerimenti

Quali operazioni avete bisogno di eseguire sul vostro "potenze di due"? Se è solo divisione e moltiplicazione, ad esempio, si può semplicemente tenere il log2 delle potenze di due in questione, e l'uso di sottrazione e addizione su di loro, invece. Senza sapere che cosa tipo di "manipolare" che si desidera, è impossibile dare buoni suggerimenti su come in modo efficiente "manipolare"; -)

.

Facile: long: -)

Se non ti dispiace floating-point, double può rappresentare esattamente tutti i poteri di 2 fino a 2 ^ 1023.

In caso contrario, dipende da che tipo di "manipolazione" si sta facendo.

appare come java.math.BigInteger è quello che ti serve.

Ha mod, shiftLeft, shiftRight, e, naturalmente add, multiply, subtract e divide. E 'un tipo immutabile (ala String), quindi forse non è il modo più efficiente ultima di fare le cose, ma se non hai provably identificato come un problema di prestazioni, io non mi preoccuperei su di esso.

Ha bisogno di essere precisi?

In caso contrario si può rappresentare è come una lunga moltiplicata per un due per la potenza di un int.

Esempio:

x = 15 * 2 ^ 123

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top