Вычислить логарифмическую базу 2 числа в Котлине
В этой статье рассматриваются различные способы расчета log2
числа в Kotlin.
1. Использование
ln()
функцияИдея состоит в том, чтобы использовать ln(n)
функция для вычисления натурального логарифма (основание e
) значения n
и использовать логарифмическое тождество для вычисления log2(n)
. Логарифмическая идентичность logba = log10(a)/log10(b)
, следовательно, log2n = log10(n)/log10(2)
. Обратите внимание на следующие особые случаи в соответствии с документацией Kotlin:
ln(NaN)
являетсяNaN
ln(n)
являетсяNaN
когдаn
ln(+Inf)
является+Inf
ln(0. 0)
является-Inf
Вот рабочий пример:
1 2 3 4 5 6 7 8 9 10 11 | import kotlin.math.ln
fun log2(n: Int): Double { return ln(n.toDouble()) / ln(2.0) }
fun main() { val n = 10 val log2n = log2(n) println(log2n) } |
Скачать код
результат:
3.3219280948873626
2. Использование
Integer.numberOfLeadingZeros()
функцияThe Integer.numberOfLeadingZeros()
Функция возвращает количество нулевых битов, предшествующих самому значимому установленному биту. Затем log2(n)
для номера n
можно вывести по формуле: 31 - Integer. numberOfLeadingZeros(n)
.
1 2 3 4 5 6 7 8 9 10 | fun log2(n: Int): Int { require(n > 0) { «n ($n) must be positive» } return 31 — Integer.numberOfLeadingZeros(n) }
fun main() { val n = 10 val log2n = log2(n) println(log2n) } |
Скачать код
результат:
3
Это все о расчете log2
числа в Kotlin.
Оценить этот пост
Средний рейтинг 5/5. Подсчет голосов: 10
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования. 5}{5}….$
Когда упрощаются коэффициенты путем деления на множители факториала, они являются своего рода гармоническим рядом, который не сходится очень быстро. Числители — это последовательные степени х, а знаменатели простые числа, не факториалы.
Вы захотите логарифмы чисел больших, чем 2. Здесь скорость сходимости показана в нахождении логарифма 2 этим методом. На сходимость влияет: единственный уменьшающийся фактор гармонического ряда интегральных обратных чисел. Он колеблется между наивысшим значением, а значит, должен сходиться гораздо дальше, чтобы достичь своего наивысшего значения.
Логарифмические ряды: изменение
Вот трюк, для чего введены логарифмы. Если вы изменяете переменную снова, используя (1 + x)/(1 — x), по принципу логарифмов, логарифм этой переменной будет логарифмом (1 + x) минус логарифм (1 — x).
Во-первых, ряд логарифмов (l — x) был последовательностью степеней x разделенных на гармоническую последовательность интегральных чисел, меняющих свой знак. Ряды для log(l — x) используют те же численные члены, но все их знаки — отрицательные. Помните, что вы собираетесь вычесть их из log(l + x), вследствие чего все отрицательные знаки в конце станут позитивными.
Этот метод делает две вещи: удаляет четные степени x и и объединяет их. Эти ряды заключены в большие скобки, умноженные на 2.
Чтобы показать, насколько быстрее эти ряды сходятся, используйте это для вычисления log 2, что при применении первого метода заняло бы вечность. Решите (x + 1)/(x — 1) = 2. Здесь еще одна переменная изменится. Решая этого уравнения, переменная в ряде не 1, а 1/3. Так как каждый другой член выпал, последовательные члены уменьшаются на х (или 1/9). Это соотношение приводит к гораздо быстрому схождению. Он сходится так быстро, что только 4 члена необходимы для получения log2 c четырьмя цифрами после запятой.
Расчет логарифмов
Здесь вы рассчитываете два логарифма, чтобы найти сравнения в скорости сходимости. Для расчета log1,1 сделайте х = 1 / 21. Последовательные члены сейчас сходятся более чем 400:1. Три члена ряда теперь производят логарифм с шестью знаками после запятой.
Как вы уже видели, для вычисления log2, х = 1/3, где сходимость около одной десятой за каждый дополнительный член. Для точности до шести цифр, требуется семь членов.
Теперь попробуйте найти значение log 3; x = 1/2. Этот ряд сходится более медленно, но попробуйте по-другому. Вы уже посчитали log 2. Log 3 = log 2 + log 1.5, потому что 3 = 2.1,5. Поэтому, найдите log1.5 и сложите его значение с log2. Log 1.5 использует x = 1/5 и его ряд сходится быстрее чем в случае с log 2. Теперь у вас есть значение с 6-ю цифрами для log 3. В примере выше вы пробовали найти значение логарифмов до 10. Обратите внимание, что есть способы для упрощения вычислений. Log 4 есть удвоенный log 2. Вы можете получить его либо из 4 = 2.2 или из 4 = 22. Log 5 есть log 4 + log 1.25. Log 6 есть log 2 + log 3. Log 7 есть log 4 + log 1.75. Log 8 есть log 2 взятый 3 раза, потому что 8 есть 23. Log 9 есть удвоенной log 3 потому что 9 = 32. Наконец, log 10 есть log 2+ log 5.
Общие логарифмы
Хотя все алгоритмы должны быть вычислены в их основной форме с основанием e, иногда называемыми гиперболическими или логарифмами Непера (от имени изобретателя логарифмов). Но более распространенное названия натуральные логарифмы или логарифмы с основанием e.
Log10x = y x = 10y Logε10 = t εt = 10
So x = (εt)y = εty Logεx = ty
Если у логарифма основание 10, тогда логарифм 10 по основанию 10 равен 1. Вы можете изменить основание, разделив натуральный логарифм на логарифм 10.
Использование логарифмов: умножение и деление
Конечно, нахождение логарифмов с помощью карманных калькуляторов намного проще, чем использование таблиц. Калькулятор вычисляет логарифмы обоих видов, натуральные и общие. Общие логарифмы обозначаются log, а натуральные логарифмы обозначаются ln.
Примеры, которые мы здесь приводим, взяты из таблиц с логарифмами с четырьмя цифрами. Ваш калькулятор, возможно, показывает больше цифр, чем таблица. На своем калькуляторе я ввел логарифм 32 и получил 1.505149978; значение логарифма 256 равно 2.408239965. Суммируя их, получим 3.9133889944. Используя сдвиг, ответ равен точно 8192!
Последний пример показывает еще одну разницу с таблицами. Таблица дала только мантиссу — дробную часть. Вам необходимо вставить характеристику — целое число слева от запятой. 0.0969 есть мантиссой (в четырехзначных таблицах) для чисел 125. Риска над 1 указывает, что характеристика отрицательная. Поэтому, log есть -1 + 0.0969. Мой калькулятор пишет -0.903089987. Однако, если я ввожу 1.25 вместо 0.125, калькулятор пишет 0.096910013. Если число больше 1, мантисса не меняется, только характеристика изменяется и смещается десятичная точка.
Использование логарифмов: индексы
Здесь снова примеры, которые были приготовлены с помощью четырехзначных логарифмических таблиц. Карманный калькулятор может найти ответы намного быстрее. Действительно, большинство калькуляторов имеют одну клавишу, xy. Однако, давайте посмотрим как обработать эти примеры с помощью калькулятора.
Логарифм 12 считается калькулятором как 1.079181246. Умножая на 3, получаем 3.23764 3738. Используя смещение и логарифм дает точно 1728. Вводим 12 снова. Нажимаем xy, затем 3, и =. Калькулятор снова высвечивает 1728.
В следующем примере log 2 равен 0.301029995, правильный ответ снова. Однако, если ввести log 1024, высвечивается предыдущее значение 3.010299957 с одной дополнительной цифрой.
Выше использованы логарифмы или xy клавиши, где индексы были очевидны. Иногда ответ не такой простой. Возьмем следующее: 354/5. С использованием калькулятора: Log 35 = 1.544068044. Используя клавиши xy, получаем тот же ответ.
Кроме того, можно вычислить это значение используя биномиальное разложение, если калькулятор оснащен достаточной памятью. Вам не нужно повторно вычислять каждый член. После второго члена, вы можете умножить/разделить на дополнительные множители. Например, чтобы получить третий член на второй, умножте на 3 и разделите на 320 и так далее. Этот ряд сходится очень быстро.
Биноминальным разложением
Биноминальным разложением
В этот раз, 4-х значные логарифмы довольно ограниченны. Используя тот же калькулятор с клавишами логарифмов или с xy, результат равен 353.5533906. Биноминальное разложение дает тот же результат за исключением последних двух цифр.
Конечно, ваш калькулятор не сделает биномиальный ряд для вас. Для того-то и упражнения, чтобы показать, что биномиальный ряд работает. Как калькулятор это делает? Он имеет встроенные программы, которые вычисляют логарифмические ряды очень быстро — за доли секунды. Помните, что калькулятор работает в двоичной системе, даже если он высвечивает десятичные цифры.
Использование логарифмов с формулами
Формула здесь связывает давление и объем в физическом расширение и сжатии газа. Это характерно для многих формул. Величины р и v являются переменными, k и индекс n являются константами. В этой таблице к = 1000 и n = 1,4.
В таблице приведены значения v от 10 до 30 (предполагается, что этот диапазон охватывает необходимые значения в нашей конкретной задаче) и используются логарифмы для расчета соответствующего значения р (в последнем столбце). В 3-й колонке приведены значения 0,4logv в качестве помощи нахождения log1,4v. Табулирование с помощью этого метода облегчало процесс до появления калькуляторов.
Четвертая колонка есть вычитание из 3, что есть log1000. Чтобы сделать это на калькуляторе, у вас есть выбор: использовать клавишу logs или xy. В любом случае, вы должны вставить k в это. Если k было другим, чем степень 10, это немного усложнит вычисление. Метод: использовать клавишу 1/x (обратное значение) а потом умножить на 1000 (или на соответсвующее значение к).
Поиск закона логарифмов
Вы знаете, что v и p относится друг к другу по закону типа: pvn = k. Это показывает, как это делались вычисления с помощью логарифмов до появления калькуляторов. Вы можете использовать ваш калькулятор, но использование клавиши xy является не таким легким; использование клавиши log есть более легким.
Возьмем логарифмы значения p: 1.361727836 и 1.176091259. После вычитания получим 0.185636579. Возьмем логарифмы значения v: 1.176091259 и 1.301029996. После вычитания получим: 0.124938736. Разделим первое значение на второе: 0.185636579/0.124938736= 1.485820827 — значение n. Такое вычисление требовало использование ячейки памяти вашего калькулятора. И все эти цифры после запятой точные, но необязательные. Числа, с которыми вам необходимо работать, скорее всего, имеют две значащие цифры.
Вопросы и задачи
1. Рассмотрим следующий рисунок. Эти функции нарисованы на логарифмической шкале. Перерисуйте приближения этих функций в полулогарифмическом масштабе (ось х — линейные, ось у — логарифмическая). Выберите масштаб, который является обоснованными для угла значения в каждом конкретном случае.
2. Нарисуйте приблизительные значения функции в прямоугольных координатах поверх приведенного графика. Выберите масштаб, который является наиболее подходящим для диапазона значений в каждом случае. Масштабы могут быть неодинаковыми на каждой оси, но обе оси должны быть линейными.
3. Рассмотрите следующий рисунок. Эти функции нарисованы в прямоугольных координатах. Нарисуйте приблизительные значения функции в полулогарифмическом масштабе (ось х — линейная и ось у — логарифмическая). Выберите подходящий масштаб для диапазона значений в каждом случае.
4. Нарисуйте приблизительные значения функции в логарифмическом масштабе . Выберите подходящий масштаб для диапазона значений в каждом случае. Масштабы могут быть неодинаковыми на каждой оси, но обе оси должны быть линейными.
5. Используя формулу log10xy = log10x + log10y, найдите значения следующих множителей путем сложений чисел. Вы можете использовать калькулятор. Запишите ответы с тремя цифрами после запятой.
(a) 5.44 • 3.67 (b) 10.5 • 0.567
(c) 36.7 • 2.56 (d) 0.987 • 0.822
6. Используя формулу log10xy = ylog10x, найдите значения (стремя цифрами после запятой). Вы можете использовать калькулятор.
(a) 5.443,67 (b) 10.53,67
(c) 36.72,56 (d) 0.9870,822
7. Если бы в решении задачи №6 натуральные логарифмы (с основанием e) были бы использованы вместо логарифмов с основанием 10 был бы результат верным?
8. Если бы в решении задачи №6 логарифмы по основанию 7 были бы использованы вместо десятичных логарифмов, был бы результат верным?
3 = 1000\), поэтому \(\log 1000 = 3\)Логарифмы часто используются в математике, но редко при вычислениях в уме — отчасти из-за их сложности! На самом деле, самый продвинутый метод, который я преподавал, проводя различные занятия по ментальной арифметике, — это использование логарифмов (вычисляемых в уме) для вычисления сложных корней и степеней.
Математика:Математики узнают, что всегда верно следующее:
- \(\log (a*b) = \log a + \log b\)
- \(\log (\frac{a}{b}) = \log a – \log b\)
Следовательно, если мы знаем приблизительные значения \(\log 2 = 0,30103\) и \(\log 3 = 0,47712\), мы можем вычислить следующие примеры:
- \(\log{20} = \log{10 } + \log{2} = 1 + 0,30103 = 1,30103\)
- \(\log{6} = \log{2} + \log{3} = 0,30103 + 0,47712 = 0,77815\)
- \(\log{32} = 5 * \log{2} = 5 * 0,30103 = 1,50515\)
- \(\log{2,5} = \log{10} – 2 * \log{2} = 1 – 2 * 0,30103 = 0,39794\)
Наш метод вычисления логарифмов основан на запоминании различных значений логарифмов и их объединении для нахождения значения требуемого логарифма.
Подготовка:Изучите следующие значения логарифмов – и, возможно, больше:
\(\log 2 = 0,30103\)
\(\log 3 = 0,47712\)
0\7 4 \(0,8 log 4 )\(\log 1,1 = 0,04139\)
\(\log 1,3 = 0,11394\)
\(\log 1,7 = 0,23045\)
\((\log 1,01 = 0,00432)\)
Метод:- Выберите число, очень близкое к исходному числу, которое вы можете построить, используя коэффициенты, логарифмы которых вы узнали.
- Вычислите логарифм этого приближенного числа
- Рассчитайте процентную ошибку и умножьте на \(\log{1,01} = 0,00432\) и прибавьте или вычтите в зависимости от ситуации
Это простой пример: \(510 = 1,7 * 3 * 100\), и приближение не требуется.
\(\log 510 = \log{1,7} + \log{3} + \log{100} = 0,23045 + 0,47712 + 2 = 2,70757\)
Пример, требующий приближения: \(\log{511.28}\)
Здесь есть несколько разумных подходов:
\(511,28 = 510 + 0,25\%\) \(\log{511,28} = \log{1,7} + \log{3} + \log{100} + 0,00432 * 0,25 = 2,70757 + 0,00108 = 2,70865\) 9x\) для любого числа \(x\)) см. статью о вычислении антилогарифмов.
При объединении алгоритмов для логарифмов и антилогарифмов мы получаем алгоритм общего назначения для всех степеней и корней.
Как считать логарифмы в уме
Опубликовано автором John
В предыдущем посте рассматривались приближения для триггерных функций, которые достаточно просты для вычисления без калькулятора. Мне было интересно, смогу ли я придумать что-то подобное для логарифмов. Я начинаю с базы логов 10. Позже в посте я покажу, как найти логи в других базах из базы логов 10.
Пусть
х = м х 10 р .
, где 1 ≤ м ≤ 10. Тогда
log 10 ( x ) = log 10 ( м ) +
без потерь и
p общности можно считать 1 ≤ x ≤ 10.Но мы можем еще немного сузить наш диапазон. Если x > 3, вычислите логарифм x ‘ = x /10, а если x < 0,3, то вычислите логарифм 10 х . Таким образом, мы примем
0,3 ≤ x ≤ 3.
Для x в этом диапазоне
log 10 ( x ) ≈ + 1)
— очень хорошее приближение. Абсолютная ошибка менее 0,0327 на интервале [0,3, 3].
Примеры
log 10 0,6 ≈ (0,6 – 1)/(0,6 + 1) = -1/4 = -0,25. Точно: -0,2218
log 10 1776 = 3 + log 10 1,776 ≈ 3 + 0,776/2,776 = 3,2795. Точно: 3,2494
log 10 9000 = 4 + log 10 0,9 ≈ 4 – 0,1/1,9 = 3,9473. Точно: 3,9542
Другие базы
Логарифмы по всем базам пропорциональны, поэтому вы можете преобразовать между логарифмической базой 10 и логарифмической в любую другую базу, умножив на константу пропорциональности.
логарифм b ( x ) = логарифм 10 ( x ) / логарифм 10 ( b ).
Итак, предположим, например, что вы хотите вычислить log 2 48. Поскольку 48 = 32 × 1,5, мы имеем
log 2 48 = log 2 32 + log 2 1,5 = 4 + log 1901 1,5 / log 10 2
Мы можем аппроксимировать log 10 1,5 как 1/5, а log 10 2 как 1/3, чтобы получить
log 2 48 = ,5/5.
Точное значение 5,585.
Если вы хотите использовать это для натуральных бревен, вы можете запомнить
1/log 10 e = log e 10 = 2,3.
Обновление : есть лучший способ работать с другими базами. Смотрите этот пост. В том же посте объясняется, почему аппроксимация особенно проста для логарифмов с основанием 10.
Больше точности
Абрамовиц и Стеган уточняют аппроксимацию t = ( x – 1)/( x + 1). Они используют интервал [1/√10, √10], а не [0,3, 3]. Этот немного другой интервал симметричен относительно 0 при преобразовании в 9.0005 т . Уравнение 4.1.41 прогоняет t через кубический полином и снижает абсолютную ошибку до значения менее 6 × 10 -4 . Уравнение 4.1.42 использует полином 9-й степени от до , чтобы уменьшить абсолютную ошибку ниже 10 -9 .
Next
В следующем посте я покажу, как аналогично вычислить 10 x .