Функция имеет особенность вблизи . Эту особенность можно снять, однако: для следует иметь , поскольку И, следовательно, Однако форма не только не определена в , он также численно нестабилен в окрестности этой точки; чтобы оценить для очень малых численно, можно использовать разложение Тейлора, то есть усечение вышеупомянутого степенного ряда.x = 0 x = 1 f ( x ) = 1 e x = ∑ k = 0 x k(ex-1)/x=∑k=1x k - 1
Q : у функции есть имя? Другими словами, это общая проблема?
Q : Кто-нибудь знает библиотеку C / C ++, которая хорошо справляется с этой ситуацией, то есть использует разложение Тейлора соответствующей степени около 0, а другое представление далеко от нуля?
Чтобы ответить на ваш первый вопрос, нет, у функции нет имени (по крайней мере, не очень известного).
Как уже упоминалось, лучший способ вычислить функцию - это обработать несколько особых случаев. Вот как любая библиотека будет вычислять функцию.
double
2e-8
5e-4
expm1(x)/x
.Вы можете быть более изощренными и в особом случае иметь больше вещей с усеченными сериями Тейлора, но, вероятно, это того не стоит. На самом деле, не совсем ясно, что дело 1 нужно обрабатывать отдельно, поскольку, как указало k20, отмена является безопасной. Тем не менее, обработка этого отдельно позволила бы мне чувствовать себя более уверенно.
источник
Я помню этот вопрос, который был задан ранее на этом сайте, и удивительно, что ответ заключается в том, что вам нужно только точное равенство нулю в особых случаях. Ошибки сводятся к нулю. У меня нет ссылки.Да, этот ответ был совершенно неверным. Я не уверен, почему за это проголосовали так много, вероятно, потому что это было заявлено так авторитетно. Я нашел ссылку, которую я имел в виду. Это было на математике stackexchange здесь , а не на SciComp stackexchange. Формула
expm1
отмены без ошибок приведена в ответе JM и используетu = exp(x)
преобразование.источник
Чтобы ответить на первый вопрос и предоставить (вероятно, численно неэффективный) метод для второго, отметим, что это обратная производящая функция чисел Бернулли .
источник