问题是:我有大量浮动数字(双64位),对于每个数字,我将保留6位数字。
例如,原始编号为231.123456789,经过处理后,应为231.123457。
我已实现此功能,但运行速度非常慢。有没有更快的算法。也许它可以利用SSE的优势,或者基于深层次的东西,我的意思是它可以反映浮点数的本质,而不是像我的表面实现(下图)。
void Round6(double& dVal)
{
dVal *= 1000000;
dVal += 0.5;
dVal = floor(dVal);
dVal /= 1000000;
}
答案 0 :(得分:1)
如果你想用base 2 fpu进行基数10的数学运算,我认为你的代码非常接近最小代码。您将需要以基数10方式进行数学运算,这是您已经完成的,乘法,向上舍入,转换为整数以去除剩余分数,然后转换回来。提到你的b / =不会工作,因为b是一个int你输掉了分数,需要做最后一个除浮点。