Как написать lg в c
Перейти к содержимому

Как написать lg в c

  • автор:

log , logf , logl , log10 , log10f , log10l

x
Значение, логарифм которого должен быть найден.

Возвращаемое значение

Функции log возвращают естественный логарифм (базовый e ) при успешном выполнении x . Функции log10 возвращают логарифм base-10. Если x это отрицательно, эти функции возвращают неопределенный ( IND ), по умолчанию. Если x значение равно 0, они возвращают бесконечность ( INF ).

Входные данные Исключение SEH Исключение _matherr
± QNaN, IND нет _DOMAIN
± 0 ZERODIVIDE _SING
x < 0 INVALID _DOMAIN

log и log10 имеет реализацию, которая использует расширения SIMD потоковой передачи 2 (SSE2). См _set_SSE2_enable . сведения и ограничения на использование реализации SSE2.

Замечания

C++ позволяет перегружать перегрузки, поэтому можно вызывать перегрузки log , log10 которые принимают и возвращают float или long double значения. В программе C, если вы не используете макрос для вызова этой функции, log и log10 всегда принимаете и возвращаете . double

При использовании log() макроса тип аргумента определяет, какая версия функции выбрана. Дополнительные сведения см . в разделе «Математика с универсальным типом».

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью «Глобальное состояние» в CRT.

Требования

Маршрут Обязательный заголовок
log , logf , logl , log10 , log10f , log10l
log Макрос

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

// crt_log.c /* This program uses log and log10 * to calculate the natural logarithm and * the base-10 logarithm of 9,000. */ #include #include int main( void )
log( 9000.00 ) = 9.104980 log10( 9000.00 ) = 3.954243 

Для получения логарифмов по другим основаниям используйте математическое соотношение: логарифм по основанию b от числа a == натуральный логарифм (a) / натуральный логарифм (b).

// logbase.cpp #include #include double logbase(double a, double base) < return log(a) / log(base); >int main()
Log base 2 of 65536.000000 is 16.000000 

Чем отличается ln , lg, и log ?

Author24 — интернет-сервис помощи студентам

Чем отличается?
Чем отличается? %d и %i в этой проге что лучше использовать d или i #include <stdio.h> int.

Чем отличается if от (?:)
Здравствуйте. Почитываю С++, сам программирую в Делфи. Вот немного запутался. В делфи есть условный.

Чем отличается this от *this?
Привет всем ! вот код template<typename Key, typename Value> Dictionary<Key, Value>&.

Чем отличается =- от -=
Только подробно опишите пожалуйста,у меня из-за этого программа в циклах не правильно считает

Регистрация: 14.02.2012
Сообщений: 46
#include
или
#include
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
Нет в C++ функций lg и ln. Есть log и log10. А реализация зависит от компилятора.

Эксперт С++

4984 / 3091 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10

log — натуральный логарифм (http://www.cplusplus.com/refer. cmath/log/)
ln — это тоже натуральный логарифм, но в С/С++ такой функции нет.
lg — набор букв.

1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2

Насколько я знаю, log — логарифм по основанию 2(не уверен).
lg — логарифм по основанию 10.
ln — логарифм по основанию e(натуральный логарифм).
Только какое это отношение имеет к с++?

Регистрация: 28.10.2011
Сообщений: 208

ЦитатаСообщение от Toshkarik Посмотреть сообщение

Нет в C++ функций lg и ln. Есть log и log10. А реализация зависит от компилятора.
тоесть lg=log(x)/log(10) ?
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
Нет, lg это и есть log10 в C++.
Регистрация: 28.10.2011
Сообщений: 208

ЦитатаСообщение от Toshkarik Посмотреть сообщение

Нет, lg это и есть log10 в C++.

а как правильно записать lg(x) ?

1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461

variable = log10( x );

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Log — о чём говорят эти сообщения?
У меня приложение в Log выводит: 05-19 11:54:45.130: E/Cursor(878): Finalizing a Cursor that.

Чем отличается if(.) от if(isset(.)
Здравствуйте Помогите разобраться. Например, есть переменная $product_discount чем отличается.

Чем отличается Framework 2 от 1.1?
Субж. Стоит ли вообще ставить Framework 2? Сложно ли переписать проги с Framework 1.1 на 2.

Чем отличается id от class?
Гутен морген, я прочитал 3 статьи по подобным темам да там было мильно написано что id это.

Или воспользуйтесь поиском по форуму:

Как быстро найти любой логарифм с помощью обычного цикла

На прошлой неделе мы рассказали, что такое логарифм и зачем он нужен. Сегодня найдём логарифм с помощью программирования.

Вот короткая версия теории:

  1. Логарифм — это в какую степень нужно возвести одно число, чтобы получить другое число.
  2. То, число, которое возводят в степень, называется основанием логарифма.
  3. Логарифм обозначается словом log.
  4. Например, log(10) 100 = 2, потому что 10² = 100.
  5. Есть ещё обозначение lg — это то же самое, что log(10). И есть ln — это то же самое, что log(e), где e — это число Эйлера, важная математическая константа.
  6. Логарифмы используются в каждой значимой области нашей жизни, от биологии до физики.

Теперь, когда мы знаем достаточно про логарифм, то можем написать программу, которая нам найдёт любой логарифм по любому основанию.

В чём идея

Мы уже выяснили, что логарифм — это степень, в которую нужно возвести основание логарифма, чтобы получить нужное число. Получается, что нам нужно подобрать такую степень, чтобы при возведении она давала такое же число — это и будет ответом к решению логарифма.

Алгоритм поиска будет таким:

  1. Найдём минимальное значение степени, возведение в которую ещё не превысит наше число.
  2. Это значит, что следующее за ним целое число — уже перебор, и основание в этой степени точно превысит наше число.
  3. Будем делить этот промежуток пополам нужное количество раз, пока не получим нужную точность ответа после запятой.
  4. Когда цикл закончится, середина оставшегося промежутка и будет ответом.

Мы так уже делили границы пополам в задаче про то, как угадать число за 7 попыток, поэтому, если алгоритм показался немного непонятным, — перечитайте то решение и возвращайтесь сюда.

Готовим переменные

Для работы программы пользователь должен будет указать три вещи:

  1. Основание логарифма.
  2. Число, от которого мы берём этот логарифм.
  3. Точность решения. Точность указываем в количестве точно вычисленных знаков после запятой.

Выделим переменные для этого:

# на старте границы поиска значения логарифма все равны нулю start = 0 end = 0 middle = 0 # логарифм какого числа мы ищем num = 600 # основание логарифма base = 10 # сколько нужно знаков после запятой accuracy = 4

Вычисляем границы

Поиск делаем так: начинаем считать от нуля и на каждом шаге увеличиваем это значение на единицу. Как только мы превысили аргумент (то, от чего берём логарифм) — это наша конечная граница. Соответственно, предыдущее значение, которое на единицу меньше, будет стартовой границей.

# пока основание в очередной степени не превысило само число — while base**end 

Проверяем, вдруг мы сразу нашли решение

На всякий случай перед тем, как идти дальше, проверим, будет ли решением наша стартовая граница — это сразу может сэкономить нам много сил в дальнейшем:

Проверяем, вдруг мы сразу нашли решение На всякий случай перед тем, как идти дальше, проверим, будет ли решением наша стартовая граница — это сразу может сэкономить нам много сил в дальнейшем: # если сразу нашли целое значение степени if base**start == num: # выводим решение print('log(' + str(base) + ')' + str(num) + ' = ' + str(start)) # останавливаем программу exit(0)

Считаем логарифм

Мы будем считать логарифм не классическим способом из высшей математики, а простым приближением — найдём ответ с приемлемой точностью. За точность отвечает переменная accuracy , но в цикле мы её умножим на 4. Это неочевидный ход, поэтому сейчас объясним, в чём тут дело.

На каждом шаге цикла мы делим границу пополам, но если деление выпадает на чётную значимую цифру, то при делении у нас не увеличится количество знаков после запятой. Например, если нам нужна точность 2 знака после запятой, то если вторым шагом цикла мы разделим 0,4 на 2, то у нас останется один знак после запятой (0,2). Таких делений может быть 4 подряд, прежде чем мы доберёмся до следующего знака: 8 → 4 → 2 → 1, поэтому мы и умножаем требуемую точность на 4 — чтобы гарантированно получить нужную точность.

Теперь запишем этот цикл на языке программирования. Его можно было сделать изящнее, например, вложив условные операторы друг в друга или используя оператор множественного выбора, но так получается нагляднее:

# организуем цикл, чтобы получить нужную точность после запятой for i in range(accuracy*4): # увеличиваем счётчик цикла i += 1 # находим серединное значение middle = (start + end) / 2 # если основание в этой степени больше нашего числа, то сдвигаем к середине конечную границу if base**middle > num: end = middle # если основание в этой степени больше нашего числа, то сдвигаем к середине начальную границу if base**middle < num: start = middle # если основание в этой степени равно нашему числу if base**middle == num: # выводим ответ и выходим из цикла print('log(' + base + ')' + num + ' = ' + start) break

Выводим ответ

Это самая простая часть алгоритма:

# когда цикл закончился — выводим ответ print('log(' + str(base) + ')' + str(num) + ' = ' + str(middle))

Проверяем работу

Для проверки посчитаем log(10) 600 с помощью нашей программы:

Как быстро найти любой логарифм с помощью обычного цикла

Теперь запустим калькулятор и проверим наше решение:

Как быстро найти любой логарифм с помощью обычного цикла

Готовый код

# на старте границы поиска значения логарифма все равны нулю start = 0 end = 0 middle = 0 # логарифм какого числа мы ищем num = 600 # основание логарифма base = 10 # сколько нужно знаков после запятой accuracy = 5 # пока основание в очередной степени не превысило само число — while base**end num: end = middle # если основание в этой степени больше нашего числа, то сдвигаем к середине начальную границу if base**middle < num: start = middle # если основание в этой степени равно нашему числу if base**middle == num: # выводим ответ и выходим из цикла print('log(' + base + ')' + num + ' = ' + start) break # когда цикл закончился — выводим ответ print('log(' + str(base) + ')' + str(num) + ' = ' + str(middle))

Десятичный логарифм

Определение. Логарифмом числа b по основанию a , где a > 0 , a ≠ 1 , b > 0 , называется показатель степени, в которую нужно возвести основание a , чтоб получить число b .

Определение. Десятичный логарифм — логарифм по основанию 10.

Другими словами, десятичный логарифм числа b является решением уравнения 10 x = b .

Обозначение. Десятичный логарифм обозначается lg x или log x .

Калькулятор десятичных логарифмов

Свойства десятичного логарифмов

  1. lg x = log10 x - так как основание десятичного логарифма равно 10.
  2. 10 lg b = b .
  3. lg 1 = 0
  4. lg 10 = 1
  5. lg 10 n = n
  6. lg( x · y ) = lg x + lg y
  7. lg x y = lg x - lg y
  8. lg x n = n lg x

График функции y = lg x

lg x dx = x lg x - x ln 10 + C
lim lg x = -∞
x → +0

Пример 1. Найти значения десятичного логарифма от чисел 100, 1000, 0.1, 0.01, 0.001.

lg 100 = lg 10 2 = 2

lg 1000 = lg 10 3 = 3

lg 0.1 = lg 10 -1 = -1

lg 0.01 = lg 10 -2 = -2

lg 0.001 = lg 10 -3 = -3

Доказать равенство: a lg b = b lg a .

Запишем очевидное равенство:

lg b · lg a = lg a · lg ab

Возведем 10 в соответствующие степени

10 lg b · lg a = 10 lg a · lg b

(10 lg b ) lg a = (10 lg a ) lg b

Зная, что lg 2 = a , lg 3 = b , lg 5 = c , выразить lg 6; lg 30; lg 16 через a, b, c.

Используем формулы логарифма произведения и степени получим:

lg 6 = lg (2·3)= lg 2 + lg 3 = a + b ;

lg 30 = lg (5·2·3)= lg 5 + lg 2 + lg 3 = a + b + c ;

lg 16 = lg 2 4 = 4 · lg 2 = 4 a .

Вычислить log9 5 · log25 27.

Перейдем к основе 10:

log9 5 · log25 27 = lg 5 lg 9 · lg 27 lg 25

Используем свойство логарифма степени lg x n = n lg x :

lg 5 lg 9 · lg 27 lg 25 = lg 5 lg 3 2 · lg 3 3 lg 5 2 = lg 5 2 lg 3 · 3 lg 3 2 lg 5 = 3 4

Вычислить log30 8, если lg 5 = a , lg 3 = b .

Перейдем к основе 10:

log 30 8 = lg 8 lg 30 = lg 2 3 lg (3 · 10) =

Используем свойство логарифма степени, произведения, частного и то что 2= 10 5 :

= 3 lg 2 lg 3 + lg 10 = 3 lg 2 lg 3 + 1 = 3 lg 10 5 lg 3 + 1 = 3(lg 10 - lg 5) lg 3 + 1 = 3(1 - lg 5) lg 3 + 1 =

Подставим lg 5 = a , lg 3 = b :

log30 8 = 3(1 - a ) b + 1

Любые нецензурные комментарии будут удалены, а их авторы занесены в черный список!

Присоединяйтесь
© 2011-2024 Довжик Михаил
Копирование материалов запрещено.

Добро пожаловать на OnlineMSchool.
Меня зовут Довжик Михаил Викторович. Я владелец и автор этого сайта, мною написан весь теоретический материал, а также разработаны онлайн упражнения и калькуляторы, которыми Вы можете воспользоваться для изучения математики.

Если Вы хотите связаться со мной, имеете вопросы, предложения или хотите помочь развивать сайт OnlineMSchool пишите мне support@onlinemschool.com

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *