| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Поиск логарифма |
| Автор: lamber 12.6.2011, 22:15 |
| Вот возник нечаянно, негаданно вопрос, как найти логарифм, n-ого основания, либо вообще любого т.к. все мы знаем формулу преобразования одного основания в другое. Можно спросить нахрен мне это надо т.к. эта функция есть в math.h а так же в математическом сопроцессоре. тем не менее хочется знать, гуглил и нашел только алгоритмы для нахождения целой части логарифма и все. Знаю что есть несколько способов нахождения, хотелось бы узнать основные. |
| Автор: afiskon 12.6.2011, 22:34 |
| Одно из возможных решений - http://eax.me/genetic-algorithms/ (простите за самопиар). Можно получить функцию для log, sin, cos, sqrt - чего угодно. А вообще - ряды Тейлора. |
| Автор: lamber 12.6.2011, 22:49 |
| 2afiskon только засел за чтение твоего блога (мистика нах), подумал еще дельно пишет, жаль что на Перле в основном. Сори за офф топ. По теме да самопиар т.к. тема запощена в C++, а пример на Перле и конкретного ответа на мой вопрос там нет. Так что жду ответов господа))) PS Придерживаюсь услышанного мнения что Перл придумали профессиональные извращенцы. |
| Автор: Фантом 12.6.2011, 22:56 |
| Первый простейший способ - разложение в ряд Тейлора в окрестности единицы (для облегчения жизни - с предварительным отбрасыванием целой части логарифма). Второй - использование сравнительно быстро сходящегося ряда ln( (1+x)/(1-x) ) = 2 * (x + x^3/3 + x^5/5 + x^7/7 + ...). Понятно, что сначала надо представить аргумент в виде (1+x)/(1-x), но это совершенно элементарно. Третий - использовать цепные дроби. Точное выражение не помню, но что-то хорошее там существует. Ну и т.п. |
| Автор: afiskon 12.6.2011, 23:19 | ||
lamber, плохо читали значит.
Вот собственно весь ответ на ваш вопрос. Далее идут только детали того, как подбирались коэффициенты. |
| Автор: lamber 12.6.2011, 23:27 |
| 2afiskon Думаю ГА для такой задачи это из пушки по воробьям 2Фантом Можно первые два метода набросать основную идею в коде. По второму методу не понял что мы делаем с x, получаем его путем x' = (1+x)/(1-x) либо мы в сходящийся ряд подставляем просто аргумент. |
| Автор: lamber 13.6.2011, 00:25 |
| 2Фантом По второй формуле тогда вопрос, каким способом сделать преобразование y = (1+x)/(1-x), я имею ввиду в коде, на бумаге, сложности не представляет))) |
| Автор: Фантом 13.6.2011, 00:29 | ||
Так на бумаге и сделать. Если y=(1+x)/(1-x), то x=(y-1)/(y+1). Кодирование этого, думаю, сложности не представляет. |
| Автор: lamber 13.6.2011, 00:39 |
| Все до петрил, сенкс что разжевал все такому тупице как я ))) |