Log2: примеры (JAVASCRIPT)
log2(number): numberФункция Math.log2() является статическим методом объекта Math в JavaScript и возвращает двоичный логарифм числа, то есть логарифм по основанию 2. Эта функция часто применяется в алгоритмах, компьютерных науках и задачах, связанных с обработкой данных, где требуется вычисление степени двойки или определение количества битов, необходимых для представления числа.
Основные сведения о функции
Синтаксис:
Math.log2(x)Единственный аргумент x является числом, для которого вычисляется двоичный логарифм. Если x имеет отрицательное значение или равно нулю, функция возвращает NaN. Если x равен положительной бесконечности, возвращается Infinity. При x равном 1, результат будет 0, так как 2 в степени 0 равно 1.
Возвращаемое значение – число, представляющее логарифм по основанию 2 от аргумента x, или специальные значения NaN и Infinity в описанных случаях.
Простые примеры использования
Пример с положительным числом:
console.log(Math.log2(8));3
Пример с дробным числом:
console.log(Math.log2(2.5));1.3219280948873624
Пример с единицей:
console.log(Math.log2(1));0
Пример с нулем:
console.log(Math.log2(0));-Infinity
Пример с отрицательным числом:
console.log(Math.log2(-10));NaN
Пример с Infinity:
console.log(Math.log2(Infinity));Infinity
Аналогичные функции в JavaScript
В JavaScript присутствуют другие логарифмические функции объекта Math.
Math.log(x) вычисляет натуральный логарифм (по основанию e). Используется в математических расчетах, связанных с экспоненциальным ростом.
Math.log10(x) возвращает десятичный логарифм. Применяется в инженерии, научных расчетах, когда требуется логарифмическая шкала по основанию 10.
Math.LN2 и Math.LN10 – константы, представляющие натуральные логарифмы чисел 2 и 10 соответственно.
Выбор функции зависит от требуемого основания логарифма. Math.log2() наиболее эффективна для задач, связанных с двоичными системами.
Реализации в других языках программирования
В Python функция math.log2(x) из модуля math работает аналогично. Пример:
import math
print(math.log2(8))3.0
В PHP функция log($arg, $base) с основанием 2 вычисляет двоичный логарифм. Пример:
echo log(8, 2);3
В C стандартная библиотека math.h предоставляет функцию log2(double x). Пример:
#include <stdio.h>
#include <math.h>
int main() {
printf("%f\n", log2(8.0));
return 0;
}3.000000
В MySQL функцию LOG2(x) можно использовать в запросах. Пример:
SELECT LOG2(8);3.0000000000000000
Основные отличия заключаются в именовании функций и иногда в точности возвращаемого значения, но семантика остается одинаковой.
Распространенные ошибки
Передача нечисловых аргументов может привести к неявному преобразованию или NaN:
console.log(Math.log2("16")); // Строка преобразуется в число
console.log(Math.log2("текст"));4 NaN
Ожидание целого числа от результата для нестепеней двойки:
let result = Math.log2(10);
if (result === 3) { // Условие не выполнится
console.log("Точная степень двойки");
} else {
console.log("Результат дробный: " + result);
}Результат дробный: 3.3219280948873626
Использование функции без проверки на отрицательные значения или ноль, если последующая логика требует чисел:
function calculateBits(num) {
return Math.log2(num);
}
console.log(calculateBits(0));-Infinity
Изменения в спецификации
Функция Math.log2() была добавлена в стандарт ECMAScript 2015 (ES6). В более ранних версиях JavaScript эта функция отсутствовала, и для ее получения использовали математическое преобразование: Math.log(x) / Math.LN2. Все современные браузеры поддерживают Math.log2().
С момента введения существенных изменений в работе функции не происходило.
Расширенные примеры применения
Определение количества бит, необходимых для представления целого положительного числа:
function bitsRequired(number) {
return Math.ceil(Math.log2(number + 1));
}
console.log(bitsRequired(255));
console.log(bitsRequired(256));8 9
Проверка, является ли число степенью двойки:
function isPowerOfTwo(num) {
return Number.isInteger(Math.log2(num));
}
console.log(isPowerOfTwo(1024));
console.log(isPowerOfTwo(1000));true false
Создание логарифмической шкалы по основанию 2 для визуализации данных:
let data = [1, 2, 4, 8, 16, 32];
let logScale = data.map(value => Math.log2(value));
console.log(logScale);[0, 1, 2, 3, 4, 5]
Использование в алгоритме бинарного поиска для оценки максимального количества шагов:
let sortedArraySize = 1000;
let maxSteps = Math.ceil(Math.log2(sortedArraySize));
console.log(maxSteps);10
Вычисление глубины полного двоичного дерева по количеству листьев:
function treeDepth(leaves) {
return Math.floor(Math.log2(leaves));
}
console.log(treeDepth(16));4