【发布时间】:2010-04-11 00:47:24
【问题描述】:
我的 C# 程序遇到了一些速度问题,并确定此百分比计算导致速度变慢。计算很简单,n/d * 100。分子和分母都可以是任何整数。分子永远不会大于分母,也永远不会是负数。因此,结果始终为 0-100。现在,这是通过简单地使用浮点数学来完成的,而且速度有点慢,因为它被计算了数千万次。我真的不需要比最接近的 0.1% 更准确的东西。而且,我只是使用这个计算值来查看它是否大于一个固定的常数值。我在想一切都应该保持为整数,所以精度为 0.1 的范围是 0-1000。有没有什么方法可以在没有浮点数学的情况下计算这个百分比?
这是我用于计算的循环:
for (int i = 0; i < simulationList.Count; i++)
{
for (int j = i + 1; j < simulationList.Count; j++)
{
int matches = GetMatchCount(simulationList[i], simulationList[j]);
if ((float)matches / (float)simulationList[j].Catchments.Count > thresPercent)
{
simulationList[j].IsOverThreshold = true;
}
}
}
【问题讨论】:
-
我认为这是一个相当稀疏/紧密的循环,可能会导致这样的瓶颈。我们能看到吗?
-
我猜如果这真的是减慢程序速度的原因,缓存效果可能会发挥与整数和浮点数学之间的差异一样大的作用。此外,装箱/拆箱或其他任何可能导致分配的事情,我预计会比数学运算产生更大的影响。
-
我刚刚将我正在使用的循环添加到消息中。
-
我认为大部分时间都花在将变量转换为浮点数,而不是在除法上。
标签: c# floating-point integer division