gpt4 book ai didi

C++ - 什么会更快 : multiplying or adding?

转载 作者:太空狗 更新时间:2023-10-29 23:21:13 25 4
gpt4 key购买 nike

我有一些代码要运行数千次,想知道什么更快。array 是一个包含 30 个值的短数组,它始终包含 0、1 或 2。

result = (array[29] * 68630377364883.0)
+ (array[28] * 22876792454961.0)
+ (array[27] * 7625597484987.0)
+ (array[26] * 2541865828329.0)
+ (array[25] * 847288609443.0)
+ (array[24] * 282429536481.0)
+ (array[23] * 94143178827.0)
+ (array[22] * 31381059609.0)
+ (array[21] * 10460353203.0)
+ (array[20] * 3486784401.0)
+ (array[19] * 1162261467)
+ (array[18] * 387420489)
+ (array[17] * 129140163)
+ (array[16] * 43046721)
+ (array[15] * 14348907)
+ (array[14] * 4782969)
+ (array[13] * 1594323)
+ (array[12] * 531441)
+ (array[11] * 177147)
+ (array[10] * 59049)
+ (array[9] * 19683)
+ (array[8] * 6561)
+ (array[7] * 2187)
+ (array[6] * 729)
+ (array[5] * 243)
+ (array[4] * 81)
+ (array[3] * 27)
+ (array[2] * 9)
+ (array[1] * 3)
+ (b[0]);

如果我使用类似的东西会不会更快:

if(array[29] != 0)
{
if(array[29] == 1)
{
result += 68630377364883.0;
}
else
{
result += (whatever 68630377364883.0 * 2 is);
}
}

对于他们每个人。这会更快/更慢吗?如果是,增加多少?

最佳答案

这是一个可笑的不成熟的“优化”。您可能会损害性能,因为您正在向代码中添加分支。预测错误的分支代价非常高。它还使代码更难阅读。

现代处理器中的乘法比以前快很多,现在只需几个时钟周期即可完成。

这里有一个提高可读性的建议:

for (i=1; i<30; i++) {
result += array[i] * pow(3, i);
}
result += b[0];

如果您真的很担心性能,您可以使用 pow(3, i) 的值预先计算一个数组。

关于C++ - 什么会更快 : multiplying or adding?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com