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,…),以避免不必要的昂贵转换。 无论如何,使用文字编译器应该足够聪明,以便在编译时执行转换。