c++ - 假设 a 是 double,2.0*a 比 2*a 快吗?

标签 c++ performance

很久以前,在一些关于古老的 FORTRAN 的书中,我看到声称将整数常量与浮点变量一起使用会比较慢,因为常量需要先转换为浮点形式:

double a = ..;

double b = a*2;   // 2 -> 2.0 first
double c = a*2.0; 

在现代 C++ 中编写 2.0 而不是 2 是否仍然有益?如果不是,可能应该首选“整数版本”,因为 2.0 更长并且对人类读者没有任何影响。

我处理复杂的长表达式,其中这些“.0”会在性能或可读性方面产生差异(如果适用)。

最佳答案

首先要涵盖其他答案,没有 22.0 不会导致性能差异,这将在编译时检查以创建正确的值。但是要回答这个问题:

Is it still beneficial to write 2.0 rather than 2 in the modern C++?

绝对。

但这不是因为性能,而是可读性和错误。想象一下以下操作:

double a = (2 / someOtherNumber) * someFloat;  

someOtherNumber 的类型是什么?因为如果它是 integer 类型,那么你就会因为整数除法而遇到麻烦。 2.02.0f 具有明显的优势:

  1. 准确地告诉代码的读者您的意图。
  2. 避免出现您不希望出现的整数除法错误。

关于c++ - 假设 a 是 double,2.0*a 比 2*a 快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51261457/

相关文章:

c++ - 如何在 QHBoxLayout 左、中、右对齐子项

c++ - 将有符号解释为无符号

c - 在 C 中实现 strcpy 函数

python - 如何将文本清理步骤压缩为单个 Python 函数?

javascript - 如何比较同一文档中数组中的元素?

c++ - 在构造函数初始化程序中复制初始化?

c++ - Openmp for 循环 : static schedule with work unbalance

python - 如何获取忽略后缀的所有元素组合?

java - 区间锁实现

c++ - 调用 std::cout.rdbuf() 产生语法错误