Pessoal, preciso fazer um programa para minha aula de cálculo numérico da faculdade.
Preciso usar o metodo da Interação Linear para calcular as raizes de uma equação.
Esse metodo precisa de muita precisão, na casa de 7 digitos depois da virgula. Pelo que percebi nem float nem double tem essa precisão, ate 1564/5 nesses formatos me retorna um valor errado.
Olha o programa que tentei fazer:
package Questão4;
import java.math.BigDecimal;
public class InteracaoLinear4 {
public static void main(String args[]) {
BigDecimal teste2 = new BigDecimal(2.000);
BigDecimal teste3 = new BigDecimal(87);
BigDecimal teste = new BigDecimal((double)1564/5);
BigDecimal teste4 = new BigDecimal(200);
teste4 = teste4.multiply(teste2);
teste4 = teste4.add(teste3);
teste = teste.multiply(teste2);
teste = teste.add(teste3);
BigDecimal another2 = teste4.setScale(7, teste4.ROUND_HALF_DOWN);
BigDecimal another = teste.setScale(7, teste.ROUND_HALF_DOWN);
another = another.divide(another2);
System.out.println(another);
}
}
Qdo. faço a ultima divisão, "another = another.divide(another2);" o programa retorna esse erro:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(Unknown Source)
at Questão4.InteracaoLinear4.main(InteracaoLinear4.java:24)
Alguem sabe o que é isso e como eu posso arrumar? O valor another e another2, por si só, estão corretos e com a precisão que eu desejo. O problema é na divisão.
Obrigado desde já!