【发布时间】:2023-03-06 18:12:01
【问题描述】:
这是关于优化 CPU 速度的。我正在寻找纳秒级增益。
基本设置:
double Result;
Result = (double) 1 / 3;
这给出“0.333333333333333”。我正在寻找的只是 4 个有效的小数位而不进行整个除法。因此,除法后的四舍五入没有区别。当他到达小数点后第四位时,CPU 应该停止处理问题。
这是一种改进吗?
int Num = (int) 1 * 10000 / 3;
double Result = Num / (double) 10000;
或者干脆
double Result = (int)(1*10000/3)/(double)10000
这样更快吗?即使再乘以 10000?
我希望 Math 方法有类似 Math.Divide(numerator,denominator,significantDecimalPlaces) 的东西。有什么建议吗?
【问题讨论】:
-
CPU 计算额外的位(在相同的固定类型内)不会“额外花费”。舍入是一个单独的问题,如果/根据需要,它会改变结果。 Does C# Compiler calculate math on constants? 读起来很有趣,可能是相关的。
-
(另外,归根结底,这类“优化”可能不相关。在极少数情况下,这可能很重要 - 并且代码可能不在 C# 中 - 它应该显示为性能热点。)
-
对于整数除法,请参阅:libdivide.com - 它是 c++,但您可以导入 C#。然而,正如已经说过的那样,寻找热点是相当值得的。如果除法确实是问题所在,则可能还有其他优化方法。在不知道自己在做什么的情况下,很难提出建议……
-
@user2864740 特别适用于编译时间常数,如示例中所示:)。要求的标准推荐:horses
标签: c# performance optimization operators