Подтвердить что ты не робот

Какая противоположность Math Power (**) в Ruby?

Мне было интересно, как получить обратную силу в Ruby?

2 ** 4 # => 16

а затем я хотел бы получить его обратно, и я не уверен, какой оператор использовать

16 ?? 2 # => 4
4b9b3361

Ответ 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