提问人:euraad 提问时间:12/17/2021 更新时间:12/17/2021 访问量:100
如果不支持 double,如何使用 float 来达到相同的精度?
If double is not supported, how can I use float to achieve the same precision?
问:
我有一个代码,可以按照我的意愿做正确的事情。C
void create_weights(float alpha, float beta, float kappa, uint8_t L){
/* Compute lambda and gamma parameters */
double lambda = alpha * alpha * (L + kappa) - (double)L;
/* Insert at first index */
float Wm0 = lambda/(L + lambda);
float Wc0 = Wm0 + 1 - alpha * alpha + beta;
printf("Wm0 = %f, Wc0 = %f, lambda = %f\n", Wm0, Wc0, lambda);
printf("Wci = 0.5f / (L + lambda) = %f\n",0.5f / (L + lambda));
}
int main() {
create_weights(0.001, 2, 0, 3);
return 0;
}
输出为
Wm0 = -999998.875000, Wc0 = -999995.875000, lambda = -2.999997
Wci = 0.5f / (L + lambda) = 166666.648140
在MATLAB中,输出为:
lambda = -2.999997000000000
Wm0 = -999999.0000082518
Wc0 = -999996.0000092518
0.5 / (L + lambda) = 166666.6666680420
所以我离得很近!但问题来了。这条线
double lambda = alpha * alpha * (L + kappa) - (double)L;
正如你所看到的,我混合了 和 .这只是为了测试。double
float
如果我将该代码更改为
double lambda = alpha * alpha * (L + kappa) - L;
或者这个代码(现在它只是代码中的浮点数):
float lambda = alpha * alpha * (L + kappa) - L;
然后我会得到这个输出:
Wm0 = -967915.312500, Wc0 = -967912.312500, lambda = -2.999997
Wci = 0.5f / (L + lambda) = 161319.384615
所以在这种情况下,我需要这一行,但我不允许使用 double,因为我的处理器不支持 double。
double lambda = alpha * alpha * (L + kappa) - (double)L;
那么,如果我想像浮点一样使用双精度浮动精度,我该怎么办?
在此处运行代码:https://onlinegdb.com/dwwWtdf2S
答: 暂无答案
评论
double
double
double lambda = (double)alpha * alpha * (L + kappa) - L;
float
double
double
double