2.0和2.0f之间的差异(显式浮动与双重文字)

Jus*_*ers 10 c c++

我有一些关于放在f文字值旁边的问题.我知道它将它定义为float但是我真的需要它吗?这是否2.0f * 2.0f更快或编译任何不同2.0 * 2.0float a = 2.0;编译的方式是否与编译方式不同float a = 2.0f;

Joh*_*itb 20

有时您需要它明确地具有类型float,如下例所示

float f = ...;
float r = std::max(f, 42.0); // won't work; (float, double).
float r = std::max(f, 42.0f); // works: both have same type
Run Code Online (Sandbox Code Playgroud)


Jer*_*fin 6

我很少谈论速度(至少直接),但事实上编译器会警告转换doublefloat.

  • 有时,它也与准确性有关.假设你的变量名称没有反映他们的类型,2.0f实际上警告其他人阅读代码,他们需要记住他们正在处理浮动而不是双重的事实.在调试诸如循环之类的东西时,这会成为一些方便的知识,其中包含大量的比较. (3认同)
  • 从理论上讲,我认为应该导致两个`double`s相乘,将结果转换为`float`.实际上,它是2.0,很可能编译器可以/将会发现它可以在整个过程中使用`float`.OTOH,优化FP数学有强制性限制(特别是在C99中),因此明确它可能有所帮助. (2认同)