Я пытаюсь вычислить a^(1/n)
, где ^
обозначает возведение в степень.Как рассчитать a^(1/n)?
Однако следующее:
Math.pow(8, 1/3)
возвращается 1.0
вместо возвращения 2.0
.
Почему?
Я пытаюсь вычислить a^(1/n)
, где ^
обозначает возведение в степень.Как рассчитать a^(1/n)?
Однако следующее:
Math.pow(8, 1/3)
возвращается 1.0
вместо возвращения 2.0
.
Почему?
Проблема заключается в том, что 1/3
использует integer (truncating) division, результат которого равен нулю. Изменение кода
Math.pow(8, 1./3);
(The .
превращает 1.
в плавающей точкой буквальным.)
Попробуйте Math.pow(8, (1.0f/3.0f))
вместо этого.
1/3
сделает целое подразделение, которое даст вам 8^0 = 1
Что, нет объяснений? –
Это интуитивно очевидно для ранга неофита! –
@HotLicks: Если бы так, этот вопрос не существовал бы. –
1/3
становится 0
(Потому что 1
и 3
воспринимаются как int
литералов).
Таким образом, вы должны сделать эти литералы плавать/двойной ...
Do:
Math.pow(8, 1f/3)
или
Math.pow(8, 1./3)
или
Math.pow(8, 1.0/3)
ЗВС. Прелестный. :) – 2013-04-11 18:01:42
Хотя этот вопрос мог бы использовать лучшее описание, я действительно не понимаю все нисходящие потоки. Это может быть тривиально для большинства людей здесь, но такая вещь (целочисленное деление, когда требуется разделение по платам) - очень распространенная проблема, особенно среди новых разработчиков; этот вопрос определенно поможет другим. – Saggio
@ Saggio - Да, это главный камень преткновения для новичков, и даже некоторые из нас «эксперты» время от времени сталкиваются с этим (и тратят больше времени на проблему, чем мы хотим признать, прежде чем мы это выясним). –