计算机计算exp函数原理,exp()函数的数值计算中的系数

经过Cephes来源搜索后,我认为这是Pommier的翻译错误。这不是我第一次在Pommier的代码中看到错误。我建议在Gromacs中使用数学库。

从exp.c在Cephe的,

static double C1 = 6.93145751953125E-1;

static double C2 = 1.42860682030941723212E-6;

....

px = floor(LOG2E * x + 0.5);

n = px;

x -= px * C1;

x -= px * C2;

从POMMIER,

_PS_CONST(cephes_exp_C1, 0.693359375);

_PS_CONST(cephes_exp_C2, -2.12194440e-4);

....

//

// fx = LOG2E * x + 0.5

//

fx = _mm_mul_ps(x, *(v4sf*)_ps_cephes_LOG2EF);

fx = _mm_add_ps(fx, *(v4sf*)_ps_0p5);

//

// fx = floor(fx)

//

emm0 = _mm_cvttps_epi32(fx);

tmp = _mm_cvtepi32_ps(emm0);

v4sf mask = _mm_cmpgt_ps(tmp, fx);

mask = _mm_and_ps(mask, one);

fx = _mm_sub_ps(tmp, mask);

//

// x -= fx * C1;

// x -= fx * C2; (Using z allows for better ILP in this step)

//

tmp = _mm_mul_ps(fx, *(v4sf*)_ps_cephes_exp_C1);

v4sf z = _mm_mul_ps(fx, *(v4sf*)_ps_cephes_exp_C2);

x = _mm_sub_ps(x, tmp);

x = _mm_sub_ps(x, z);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值