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

时间:2010-09-12 22:19:25

标签: c++ c

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

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

答案 2 :(得分:3)

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

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

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

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