gpt4 book ai didi

c - 如何计算exp(-1/x^2)?

转载 作者:行者123 更新时间:2023-11-30 15:41:11 25 4
gpt4 key购买 nike

x非常接近零时,我正在寻找一种精确计算的干净方法:

exp(-1/x^2)

最好的方法是什么(速度、精度等)?

最佳答案

为了保持极值 x 的精度,请分别处理 x 计算的整数和小数部分。

// exp(-1/x^2)
void expm1overxx(double x, double *PowerOf10, double *FractionPowerOf10) {
// Handle cases where x is not very close to zero
// This path is not important for this answer, but here as a stub for later work.
// For now, simple continue
if (fabs(x) >= 1.0) {
;
}
static const double OneOverLn10 = 0.43429448190325182765112891891661;
double y = -OneOverLn10/x/x;
*PowerOf10 = floor(y);
*FractionPowerOf10 = y - *PowerOf10;
}

void printf_expm1overxx(double x) {
double PowerOf10, FractionPowerOf10;
expm1overxx(x, &PowerOf10, &FractionPowerOf10);
char buf[20];
sprintf(buf, "%+0.15f", pow(10.0, FractionPowerOf10));
printf("f(%10f) = %se%-8.0f. = %.15e\n", x, buf, PowerOf10, exp(-1/x/x));
}

void test_expm1overxx(void) {
printf_expm1overxx(0.01);
printf_expm1overxx(0.02);
printf_expm1overxx(0.03);
printf_expm1overxx(0.04);
printf_expm1overxx(0.05);
printf_expm1overxx(0.1);
printf_expm1overxx(0.2);
printf_expm1overxx(0.3);
printf_expm1overxx(10);
}

x f(x) f(x) using exp(-1/x^2)
f( 0.010000) = +1.135483865314536e-4343 . = 0.000000000000000e+00
f( 0.020000) = +1.835672669162076e-1086 . = 0.000000000000000e+00
f( 0.030000) = +2.822121211968184e-483 . = 0.000000000000000e+00
f( 0.040000) = +3.680855854801760e-272 . = 3.680855854801800e-272
f( 0.050000) = +1.915169596714143e-174 . = 1.915169596714115e-174
f( 0.100000) = +3.720075976020902e-44 . = 3.720075976020889e-44
f( 0.200000) = +1.388794386496408e-11 . = 1.388794386496407e-11
f( 0.300000) = +1.494533852478144e-5 . = 1.494533852478143e-05
f( 10.000000) = +9.900498337491680e-1 . = 9.900498337491681e-01

printf() 中存在一些需要解决的组合问题,例如当 pow(10,fraction)very 接近 1.0,但需要更详细地了解 OP 的意图和“精确计算”的用法。

注意:如果 x 中的比例误差为 err,则 exp(x) 中的比例误差为 err*exp (x)。通过使用额外的精度,可以减轻但不能消除潜在的误差和范围。可以对上述 -OneOverLn10/x/x 进行更精细的控制,但总体解决方案是以某种方式获得额外的精度。上面利用了 y

的整数和小数部分

关于c - 如何计算exp(-1/x^2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20594162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com