me ajudem a pensar em uma melhor forma de codificar esta equação. Sou iniciante e não sei como começar a codar equações em java
750=(1-(1+j)^(-10))/j*86

me ajudem a pensar em uma melhor forma de codificar esta equação. Sou iniciante e não sei como começar a codar equações em java
750=(1-(1+j)^(-10))/j*86

Para fazer exponenciação, utilize o método pow da classe Math.
O operador ^ é para fazer XOR.
Obrigado pela dica bro, eu já trabalhava com o método
Descobri como fazer, irei postar o método aqui pra quem quiser saber como foi resolvido.
Esse daqui acha o cálculo usando o método da bissecção, procurando o j no intervalo de 10-5 até 1. Ele trabalha com BigDecimals arredondando divisões com 11 casas decimais e trabalhando com uma margem de erro de 10-5 no valor bruto do q0 encontrado para aceitar a solução.
Eis o código:
import java.math.BigDecimal;
import java.math.RoundingMode;
class Calculo {
private static final BigDecimal CEM = new BigDecimal(100);
private static final BigDecimal DOIS = new BigDecimal(2);
private static final int PRECISAO_CALCULO = 11;
private static final int PRECISAO_FINAL = 5;
private static final BigDecimal DELTA =
BigDecimal.ONE.divide(new BigDecimal(10).pow(PRECISAO_FINAL));
private static final BigDecimal financiamento(int n, BigDecimal j, BigDecimal p) {
BigDecimal a = BigDecimal.ONE.add(j).pow(n);
BigDecimal b = BigDecimal.ONE.divide(
a,
PRECISAO_CALCULO,
RoundingMode.HALF_EVEN);
return BigDecimal.ONE
.subtract(b)
.multiply(p)
.divide(j, PRECISAO_CALCULO, RoundingMode.HALF_EVEN);
}
private static final BigDecimal taxaFinanciamento(BigDecimal q0, int n, BigDecimal p) {
BigDecimal j1 = DELTA;
BigDecimal j2 = BigDecimal.ONE;
BigDecimal q1 = financiamento(n, j1, p);
BigDecimal q2 = financiamento(n, j2, p);
for (int i = 0; i < 50; i++) {
if (q1.subtract(q0).abs().compareTo(DELTA) <= 0) return j1;
if (q2.subtract(q0).abs().compareTo(DELTA) <= 0) return j2;
BigDecimal j3 = j1.add(j2).divide(DOIS);
BigDecimal q3 = financiamento(n, j3, p);
if (q1.subtract(q0).abs().compareTo(q2.subtract(q0).abs()) > 0) {
q1 = q3;
j1 = j3;
} else {
q2 = q3;
j2 = j3;
}
if (j1.compareTo(j2) > 0) {
q3 = q1;
j3 = j1;
q1 = q2;
j1 = j2;
q2 = q3;
j2 = j3;
}
}
throw new ArithmeticException("Não convergiu: " + q1 + " " + j1 + " " + q2 + " " + j2);
}
public static void main(String[] args) {
BigDecimal q0 = new BigDecimal(750);
BigDecimal p = new BigDecimal(86);
int n = 10;
BigDecimal j = taxaFinanciamento(q0, n, p);
System.out.println(j.toPlainString() + " - " + financiamento(n, j, p).toPlainString());
}
}
Eis a saída:
0.025690244208984076976776123046875 - 749.[telefone removido]
Esta saída significa que para um valor j = 2,56902…%, teremos um q0 = 749,99999…