【发布时间】:2015-06-03 13:38:29
【问题描述】:
在计算总和时使用较大的精度并在算法结束时降低精度是否是一种好习惯?喜欢
float average(const float* begin, const float* end)
{
double sum=0;
size_t N=end-begin;
while(begin!=end)
{
sum+=(double)(*begin);
++begin;
}
return (float)( sum/N); //Assume range is not empty
}
可能是,因为积累的错误少。另一方面,在数据类型之间转换时可能会出错。
【问题讨论】:
-
在 C 中,所有浮点运算都在
double-precision 无论如何中。float仅用于存储。 -
@EOF 他的观点是中间和的存储精度更高。
-
@EOF:那是在第一个 C 版本中。在当前版本中,它取决于编译器,但通常涉及浮点数的算术将使用浮点精度完成。
-
你的方法很有趣,但是使用大精度变量显然会降低程序性能。无论如何,我对你的想法有满意的一面。
-
@AnishSharma 根据编译器和架构,存储为
double实际上可能会提高性能。
标签: c floating-accuracy