0
У меня возникли проблемы с точностью экспоненциации двойников и их сумм в следующем коде:Удвои и точность кода: что не так?
public static void main(String[] args) {
for(double A = 1; A <= 100; A++)
{
for(double B = 1; B <= 100; B++)
{
for(double C = 1; C <= 100; C++)
{
for(double x = 3; x <= 100; x++)
{
for(double y = 3; y <= 100; y++)
{
for(double z = 3; z <= 100; z++)
{
if((Math.pow(A, x) + Math.pow(B, y)) == (Math.pow(C, z)))
{
System.out.println(A+"^"+x+" + "+B+"^"+y+" = "+C+"^"+z);
}
}
}
}
}
}
}
}
, в котором 1-пять сроков выхода являются:
1.0^3.0 + 2.0^53.0 = 2.0^53.0
1.0^3.0 + 2.0^54.0 = 2.0^54.0
1.0^3.0 + 2.0^55.0 = 2.0^55.0
1.0^3.0 + 2.0^56.0 = 2.0^56.0
1.0^3.0 + 2.0^57.0 = 2.0^57.0
Это ясно, что добавление «1.0^3.0» (в основном «1.0») с «2.0^53.0» делает NOT равным «2.0^53.0»; есть также что-то не так с y-значением.
Возможно, что мое условное утверждение неверно, или мне, возможно, придется использовать другой примитивный тип данных ... Спасибо.
Что я могу сделать, чтобы исправить свой код? – J0nathan
@ J0nathan: Используйте 'long', или' BigDecimal'/'BigInteger'. –
Спасибо, сэр. – J0nathan