像这样舍入浮点数的算法

时间:2013-08-12 19:00:52

标签: algorithm assembly floating-point sse

问题是:我有大量浮动数字(双64位),对于每个数字,我将保留6位数字。

例如,原始编号为231.123456789,经过处理后,应为231.123457。

我已实现此功能,但运行速度非常慢。有没有更快的算法。也许它可以利用SSE的优势,或者基于深层次的东西,我的意思是它可以反映浮点数的本质,而不是像我的表面实现(下图)。

void Round6(double& dVal)
{
    dVal *= 1000000;
    dVal += 0.5;
    dVal = floor(dVal);
    dVal /= 1000000;
}

1 个答案:

答案 0 :(得分:1)

如果你想用base 2 fpu进行基数10的数学运算,我认为你的代码非常接近最小代码。您将需要以基数10方式进行数学运算,这是您已经完成的,乘法,向上舍入,转换为整数以去除剩余分数,然后转换回来。提到你的b / =不会工作,因为b是一个int你输掉了分数,需要做最后一个除浮点。