Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 是否有理由对n/k使用算术表达式n*(1/k)?_Performance_Division_Multiplication_Arithmetic Expressions - Fatal编程技术网

Performance 是否有理由对n/k使用算术表达式n*(1/k)?

Performance 是否有理由对n/k使用算术表达式n*(1/k)?,performance,division,multiplication,arithmetic-expressions,Performance,Division,Multiplication,Arithmetic Expressions,有时我在算术运算中遇到这样的表达式:n*(1/k) 这种表达式可以用更简单的方式表示:n/k 我可以想象,在某些情况下,如果(1/k)表示众所周知的成分,则前者可能更具描述性,但情况并非总是如此。 性能增益/损耗如何?精确性呢 有些开发人员使用n*(1/k)表单有什么隐藏的原因吗?对我来说,我发现使用n*(1/k)会得到不太准确的答案,因为当控件解算an时,会产生(1/k)的结果这些情况可能会导致结果的舍入或微调,从而导致精度损失。在乘法过程中,损失的幅度会增加。因此,就我而言,我会说n/k更好

有时我在算术运算中遇到这样的表达式:n*(1/k)

这种表达式可以用更简单的方式表示:n/k

我可以想象,在某些情况下,如果(1/k)表示众所周知的成分,则前者可能更具描述性,但情况并非总是如此。 性能增益/损耗如何?精确性呢


有些开发人员使用n*(1/k)表单有什么隐藏的原因吗?

对我来说,我发现使用n*(1/k)会得到不太准确的答案,因为当控件解算an时,会产生(1/k)的结果这些情况可能会导致结果的舍入或微调,从而导致精度损失。在乘法过程中,损失的幅度会增加。因此,就我而言,我会说n/k更好

如果进行多次计算,肯定会有性能提升已执行,但
1/k
在所有这些方法中都很常见-乘法往往比除法具有更好的性能。如果n=3和k=3,n/k给出了正确的答案,尽管n*(1/k)给出了一个大概的答案。我认为在数学中这样写比较常见。@paragangil这两种情况下结果的差异可能表明表达式的形式是由编译器保留的,因此不管我们如何编写它。你的论点足够有力,我可以避免使用n*(1/k)形式,而在精度很重要的情况下使用n/k。
k
不需要是常数。它只需多次用作除数。如果您只有
a/k
,编译器将保持这种方式。如果您有
a/k
b/k
,那么计算
r=1/k
会更快。然后是
a*r
b*r
。此优化可以手动完成,也可以由编译器完成(如果您允许它执行不安全的FP优化)。即使您将其编写为
a*(1/k)
b*(1/k)
,编译器也会足够聪明,只执行
1/k
一次。有时速度比精度更可取。阅读评论上的链接
x*rsqrt(x)
将比
sqrt(x)
快得多。我告诉了我对精度的看法。我知道它只回答了问题的一半。我不知道性能问题。与其给出错误的方向,不如干脆离开。它仍然不能回答问题。OP问了一个使用它的原因,而不是为什么你不应该使用itread这个问题,伙计……他问了一些关于精度的问题?我就是这么回答的。我希望有人能很快给出完整的答案。读这个问题,伙计。他问:“是否有理由使用n*(1/k)而不是n/k的算术表达式?”其他问题是为了使用该表达式的原因