gpt4 book ai didi

c++ - 将 int 值添加到 double 时是否有性能优势/惩罚?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:56 27 4
gpt4 key购买 nike

给定 vector 加法:

  NPNumber NPNumber::plus(const double o) const {
vector<double> c;
for (double a : values)
c.push_back(a + o);

return NPNumber(width, c);
}

如果 NPNumber 包含一个 double vector (字段值),当我只添加一个整数而不是另一个 NPNumber 时,与转换该整数并使用上面的函数相比,是否有性能优势或损失?

也就是说,这在任何架构上是更快还是更慢:

  NPNumber NPNumber::plus(const int i) const {
vector<double> c;
for (double a : values)
c.push_back(a + i);

return NPNumber(width, c);
}

最佳答案

它强烈依赖于编译器,你应该在你的代码中测量它。在我的机器(32 位 MinGW/gcc 4.9)中进行的快速简单观察表明,+ 本身对于这两种情况都是相等的,但是积分运算似乎要好一些。

添加两个double:

!        double d = 0.2;
fldl 0x409070
fstpl -0x10(%ebp)

! double y = 1.0;
fld1
fstpl -0x18(%ebp)

! double z = d + y;
fldl -0x10(%ebp)
faddl -0x18(%ebp)
fstpl -0x20(%ebp)

添加两个int:

!        double d = 0.2;
fldl 0x409070
fstpl -0x28(%ebp)

! int y = 1;
movl $0x1,-0x2c(%ebp)

! double z = d + y;
fildl -0x2c(%ebp)
faddl -0x28(%ebp)
fstpl -0x38(%ebp)

两者都使用faddl 进行相加,但编译器使用更好的指令在相加之前加载整数。因此,将一个整数加到一个 double 上没有任何惩罚(而且它可能比将两个 double 加起来更好)。

在您的应用程序中,分析是找出哪个更好的最佳方法。

关于c++ - 将 int 值添加到 double 时是否有性能优势/惩罚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20190727/

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