分批进行除法还是一次除法更快?

Is it quicker to do division batch-wise or just once?

假设我有数字:1、2、4、7、12 和 18(随机选择)。计算平均值时这样做是否更快:

mean=0
loop through [1, 2, 4, 7, 12, 18]
   for each item:
     increase mean by (item/total number of items)

mean=0
loop through [1, 2, 4, 7, 12, 18]
   for each item:
     increase mean by (item)
divide mean by 3

或者它对算法的速度没有影响?这是一个纯理论问题(忽略具体选择的编译器等)

这在一定程度上取决于您的编译器的智能程度 - 有些会执行大量优化,有些则不会。通常可以配置优化级别,以便您可以改变编译器转换代码的程度。

在优化的限制下,编译器可以识别您的代码计算常量值并在编译期间预先计算它并将结果放入输出变量。这绝对是可能的。

另一种可能性是编译器识别出循环在固定范围内,因此它删除循环并扩展求和。

在没有优化的限制下,您的第一个片段执行 6 个除法运算,而第二个片段只执行一个。由于每个片段的其他操作数相同,因此与第二个片段相比,第一个片段不会更快,而且可能更慢。

了解您所用语言的编译器或解释器的优化并尝试不同级别的优化以了解每个代码段的性能如何变化可能会很有启发意义。您可能需要更大的输入样本才能获得有用的时间测量结果。