Какая противоположность Math Power (**) в Ruby?
Мне было интересно, как получить обратную силу в Ruby?
2 ** 4 # => 16
а затем я хотел бы получить его обратно, и я не уверен, какой оператор использовать
16 ?? 2 # => 4
Ответы
Ответ 1
Обратным к возведению в степень является логарифм.
Если ab = c
, то logac = b
.
Логарифм можно найти в модуле Math
. Это логарифмическая база-e (log
) или base-10 (log10
). Чтобы получить логарифм в base-N, используйте формулу:
logNa = logxa/logxN
где x
- значение, такое как e
или 10
. Для вашего конкретного случая:
log216 = loge16/loge2 = Math.log(16)/Math.log(2) = 4
Если вы считаете, что это объяснение хорошо, потому что оно расширяет ваши знания или плохо, потому что вы ненавидели математику в средней школе, полностью зависит от вас: -)
Ответ 2
Math.log(16) / Math.log(2)
Ответ 3
Или, наоборот, сделайте это так:
>> 16**(1.0/2)
=> 4.0
Ответ 4
На самом деле:
- Маро фактически прав, но
- Комментарий Maro не поддерживает ответ Джереми Мюррея-Уэйкфилда, который не относится к вопросу OP.
Маро, следовательно, "прав" самостоятельно, но не как поддержка ответа Джереми Мюррея-Уэйкфилда, который сам по себе не так "неправилен", как не правильный ответ на вопросы ОП.
Надеюсь, что окончательный!
Ответ 5
Более чистый способ получить логарифм, начиная с Ruby 1.9.1, состоял бы в использовании Math.log2
:
[1] pry(main)> Math.log2(2**4)
=> 4.0