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

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

有时您需要它明确地具有类型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 

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

AFAIK,在“普通”PC(具有类似x87的数学协处理器的x86)上,速度的差异是无关紧要的,因为计算内部完全以80位精度进行。

当你有大量的浮点数管理(科学计算或类似的东西)时,浮点数可能会变得很重要,因此使用较小的数据类型可能很方便,既可以使用更少的内存,也可以更快地从RAM读取它们/磁盘。

在缺少浮点单元的机器(例如大多数微控制器)上使用浮点数而不是双精度数也是有用的,其中所有浮点运算都是通过编译器插入的代码在软件中执行的; 在这种情况下,浮点运算的速度可能会有所提高(在这种环境中,通常每一点内存都很重要)。

在PC上,IMO你可以在“普通”上下文中使用double,只是尽量避免在同一个表达式中混合使用数据类型(double,float,int,…),以避免不必要的昂贵转换。 无论如何,使用文字编译器应该足够聪明,以便在编译时执行转换。