E o seguinte estou fazendo um programa para criptografia RSA e estou tendo problemas nos resultados por que os números são muito grandes e as variáveis (int, long, etc…etc…) tem um limite.
Por exemplo.
long num = (long) Math.pow(3,39);
System.out.println(num % 121);
Conferindo o resultado na calculadora, o resultado deveria dar 81, mas esta dando 70.
Quando diminuo o valor do expoênte do Math.pow de 39 para 29 o resultado da certinho (81).
Sei que isso dever ser por causa do limite que o long tem, mas como eu resolvo isso!!
Ja tentei usar o double, float etc.etc…
Tem tambem a classe BigInteger, mas não consegui usar!!
Tente usar java.math.BigDecimal
Para saber os ranges dos numeros veja as constantes. Na classe Integer tem a constante Integer.MAX_VALUE, e assim por diante.
Thingol, aproveitando a brecha:
Esses dias implementei um programinha em C para pegar a qtdade de memoria / disco disponivel:
-> http://www.guj.com.br/posts/list/30176.java
No caso do Linux, o SO retorna a qtdade de blocos livres e o tamanho de cada bloco. Precisei multiplicar as 2 informações para chegar à qtdade de bytes.
Vc sabe qual o melhor tipo em C para fazer essas operações ?
Acho que um disco tão cedo não vai chegar a 2 ^ 64 bytes.
Use um inteiro de 64 bits.
No GCC/g++ o tipo é long long (“a pr0n type”) e no Microsoft Visual C++ o tipo é __int64.
Para imprimir um long long, use “%lld” (no caso do GCC/g++) ou “%I64d” (no caso do MSVC++).