Я читал, что функция expm1
подходит для вычисления 1 - exp( x) для малых x без потери точности из-за усечения 1,0 на ~15 цифрах (для удвоения). Есть ли такая функция для 1 - sqrt(x)? На данный момент я просто использую очень большое разложение Тейлора, потому что мне требуется столько (предпочтительно все) цифр точности, сколько могут предложить двойные/длинные двойные числа.
Редактировать: здесь я сильно запутал свое намерение: я хочу вычислить 1 - sqrt(1-x)
для x
где-то между 10 ^ -12 и 1.
exp(x) - 1
- person Cory Kramer   schedule 20.06.2017double foo(double x) { return 1 - sqrt(x); }
недостаточно для ваших нужд с небольшимx
? - person chux - Reinstate Monica   schedule 21.06.2017sqrt1pm1()
, которая вычисляет sqrt(x+1)-1, что должно подойти для ваших целей, поскольку 1 - sqrt(1-x) = - sqrt1pm1(-x). Вы всегда можете создать разумную реализацию самостоятельно:double sqrt1pm1 (double a) { return a / (1.0 + sqrt (a + 1.0)); }
- person njuffa   schedule 06.09.2017