(int) Math.pow () возвращает неправильное значение - PullRequest
0 голосов
/ 06 марта 2020

Я использую следующий метод для возврата значения параметра x в кубах.

public int cubeNumber(int x)
{
    return (int)(Math.pow((double)x, 3.0));
}

Когда в качестве параметра передается 41243, метод неправильно возвращает

2147483647

, а не

70153726375907

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Сделай так. Для больших чисел возвращаемое значение должно быть long или, возможно, BigInteger.

     public static long cubeNumber(long x) {
           return x*x*x;
     }

или это

     public static long cubeNumber(long x) {
         return (long)Math.pow(x,3);
     }

или это

     public static BigInteger cubeNumber(long x) {
         return BigInteger.valueOf(x).pow(3);
     }

Все решения, кроме BigInteger, имеют ограничения по точности.

1 голос
/ 06 марта 2020

Попробуйте использовать тип данных "long", результат слишком велик для типа данных "int" для обработки. Достигнуто максимальное значение типа данных, поэтому будет возвращено только максимальное значение "int". Проверьте эту ссылку при условии (http://cs-fundamentals.com/java-programming/java-primitive-data-types.php)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...