如果f是双精度数,f+=1和f+=1.0有什么区别吗?

is there any difference between f+=1 and f+=1.0 if f is a double?

本文关键字:什么 区别 如果 双精度      更新时间:2023-10-16

假设我们有double f;

f+=1f+=1.0有什么区别吗?

编译器如何处理这些情况?

我尝试在我的电脑上循环1010次,经过的时间几乎是相同的

此处指c++03

4.9浮点整型转换[conf .fpint]

可以是整型或枚举类型的右值转换为浮点类型的右值。结果是精确的如果可能的话。否则,它是实现定义的选择下一个较低或较高的可表示值。

如果您的系统可以精确地表示1.0(并且看起来可以),那么表达式是相同的。

在任何自尊的编译器中都没有区别,隐式强制转换肯定会在编译时执行,甚至可能禁用优化。但是,如果您有疑问,您可以随时检查生成的程序集。

现在,从风格上讲,我更喜欢总是使用"正确"类型的常量(特别是在表达式中,有些术语可能会在稍后更改为int),尽管有些人认为所有末尾的.0只会增加视觉混乱(但是:您可以避免末尾的0,只留下点来指定双字量-就像1.一样)。

非优化的构建中可能会有轻微的区别:整数常数1可以(应该?)在运行时而不是编译时提升为double。

您可以随时检查您的系统:

#include <iostream>
#include <type_traits>
using namespace std;
int main() 
{
    double f(0.);
    cout << std::is_same<decltype(f+1), decltype(f+1.)>::value << endl;
    return 0;
}

如果有人发现他们有不同的地方,我希望能评论一下