-3

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

比如原来的号码是231.123456789,经过处理应该是231.123457。

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

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

1 回答 1

1

如果您想使用以 2 为底的 fpu 进行以 10 为底的数学运算,我认为您的代码非常接近于最少的代码。您将需要以 10 为底的方式进行数学运算,这就是您所做的,乘法,四舍五入,转换为整数以去除剩余的分数,然后再转换回来。如前所述,您的 b/= 将不起作用,因为 b 是 int 您丢失了分数,需要制作最后一个除法浮点数。

于 2013-08-12T19:58:32.253 回答