2010-09-23 6 views
4

Я ищу алгоритм для вычисления ln (1-x). x часто мал (< 0,01), но иногда он может быть больше. Алгоритм должен быть точным и не слишком медленным. Я бы предпочел не использовать библиотеку для ln (x), потому что я могу потерять точность.Хороший алгоритм вычисления ln (1-x) для малого (и иногда большого) x

+0

Какова допустимая погрешность ошибки? И насколько большой может быть 'x'? –

+0

Точность очень важна, поэтому я не хочу использовать библиотеку, потому что по журналу (1.0-x) я сразу теряю точность. Но алгоритм не должен быть на порядки медленнее, чем при использовании log (1.0-x). Наконец, в некоторых случаях x может быть близок к 1.0, но я мог бы, конечно, обрабатывать их в отдельном алгоритме. – willem

+0

Есть специальные функции для этого во многих библиотеках, см. Мой отредактированный ответ. –

ответ

3

В зависимости от точности, которую вы хотите, -x является хорошим приближением к маленьким . От here.

Редактировать: Если причина необходимости алгоритма получает точность лучше, то есть множество библиотек, которые специализированы для log(1+x). Например, в Python используйте log1p. То же в C и C++.

+0

Ссылки, которые вы предоставляете, не включают алгоритм. Я нашел один, использующий log1p в качестве поискового запроса: http://golang.org/src/pkg/math/log1p.go, но имеет точность float – willem

+0

Они не включают алгоритм, но каждый язык программирования, который я знаю может использовать библиотеку C так или иначе. Кроме того, пример, который вы нашли, имеет точность «float64», которая является двойной точностью IEEE. Не могли бы вы рассказать нам, какая у вас приемлемая ошибка и почему вы не хотите использовать доступные библиотеки? Согласно вашей потребности, кто-то здесь может помочь. –

+0

Аа, я понимаю, что float64 аналогичен/равен удвоению. Тогда, вероятно, будет достаточно алгоритма. Моя допустимая ошибка будет относительной ошибкой около 10^{- 9}. – willem

0

Если вы используете MATLAB, функция log1p() была специально разработана для вычисления ln (1 + x) при малых значениях x.

+1

В этом вопросе ничего не говорится о том, что они используют MATLAB, поэтому ваш ответ не полезен. – Tony

 Смежные вопросы

  • Нет связанных вопросов^_^