Я ищу алгоритм для вычисления ln (1-x). x часто мал (< 0,01), но иногда он может быть больше. Алгоритм должен быть точным и не слишком медленным. Я бы предпочел не использовать библиотеку для ln (x), потому что я могу потерять точность.Хороший алгоритм вычисления ln (1-x) для малого (и иногда большого) x
ответ
В зависимости от точности, которую вы хотите, -x
является хорошим приближением к маленьким . От here.
Редактировать: Если причина необходимости алгоритма получает точность лучше, то есть множество библиотек, которые специализированы для log(1+x)
. Например, в Python используйте log1p. То же в C и C++.
Ссылки, которые вы предоставляете, не включают алгоритм. Я нашел один, использующий log1p в качестве поискового запроса: http://golang.org/src/pkg/math/log1p.go, но имеет точность float – willem
Они не включают алгоритм, но каждый язык программирования, который я знаю может использовать библиотеку C так или иначе. Кроме того, пример, который вы нашли, имеет точность «float64», которая является двойной точностью IEEE. Не могли бы вы рассказать нам, какая у вас приемлемая ошибка и почему вы не хотите использовать доступные библиотеки? Согласно вашей потребности, кто-то здесь может помочь. –
Аа, я понимаю, что float64 аналогичен/равен удвоению. Тогда, вероятно, будет достаточно алгоритма. Моя допустимая ошибка будет относительной ошибкой около 10^{- 9}. – willem
Если вы используете MATLAB, функция log1p() была специально разработана для вычисления ln (1 + x) при малых значениях x.
В этом вопросе ничего не говорится о том, что они используют MATLAB, поэтому ваш ответ не полезен. – Tony
Какова допустимая погрешность ошибки? И насколько большой может быть 'x'? –
Точность очень важна, поэтому я не хочу использовать библиотеку, потому что по журналу (1.0-x) я сразу теряю точность. Но алгоритм не должен быть на порядки медленнее, чем при использовании log (1.0-x). Наконец, в некоторых случаях x может быть близок к 1.0, но я мог бы, конечно, обрабатывать их в отдельном алгоритме. – willem
Есть специальные функции для этого во многих библиотеках, см. Мой отредактированный ответ. –