Limite de números em float e long

Olá, eu tenho a seguinte fórmula:

(5* x * x* x - 150 * x * x + 400 * x) / 3

Aonde x = número que tu quer obter o resultado

O problema é que sempre que eu uso a variável como float, quando x > 86 que o resultado seria acima de 10,000,000 em um número inteiro, ele fica assim: 1.02426E7 (exemplo de x = 87)

Ou, quando coloco em Long, vai mais longe o range dos números

porém quando x > 351 o resultado é assim, no exemplo de 352: -710900565

x = 351 em float, seria 714,612,600

O detalhe é que, eu preciso de um range maior, como uso pra “decodificar” esses números que recebo? ou não é possível pegar resultados assim com java?

Opa,

Bom dia,

import java.math.BigDecimal;  
  
public class BigDecimalValues {  
  
    public static void main(String[] args) {  

        // x precisão que você quer

        BigDecimal valor = new BigDecimal(Math.pow(2, x));  
        System.out.println("Valor: " + valor);  
      
    }  
  
}