【发布时间】:2011-07-22 20:47:34
【问题描述】:
我需要遍历一个摊销公式,如下所示:
R = ( L * (r / m) ) / ( 1 - pow( (1 + (r / m)), (-1 * m * t ) );
我使用for 循环进行迭代,每次将 L(贷款价值)增加 1。循环工作得很好,但它确实让我想知道别的东西,这是在循环执行之前执行基本操作然后通过变量引用这些值的值(或缺少值)。例如,我可以进一步修改这个函数看起来像
// outside for loop
amortization = (r/m)/(1 - pow( (1+(r/m)), (-1*m*t) ) )
// inside for loop
R = L * amortization
这样,我不必在循环的每次迭代中执行大量数学运算,只需引用变量数量并执行单个运算。
我想知道这有多相关?提取这些操作是否有任何实际价值,或者节省的时间是如此之少,以至于我们正在谈论从迭代大约的 for 循环中节省毫秒的时间。 200,000 次。后续问题:如果我进行像 sqrt 这样更昂贵的操作,那么提取这样的操作是否值得?
(注意:如果这很重要,我在问这个问题时特别考虑了 c++)
【问题讨论】:
-
编译器无论如何都会做这种事情 - 试试谷歌的“循环不变”。
-
为什么不自己看看有什么不同呢?我认为实验可能比问这个问题要快。
-
@Rooke 我确实尝试过,但没有看到性能差异。显然这是由于“循环不变代码”。
标签: c++ performance iteration