代码之家  ›  专栏  ›  技术社区  ›  Justin Meiners

2.0和2.0f之间的差异(显式浮点与双字面值)

c c++
  •  10
  • Justin Meiners  · 技术社区  · 15 年前

    我有一些关于 f 在文字值旁边。我知道它把它定义为 float 但我真的需要它吗? 是这个吗 2.0f * 2.0f 快于或不同于 2.0 * 2.0 float a = 2.0; 编译方式不同于 float a = 2.0f;

    3 回复  |  直到 10 年前
        1
  •  20
  •   Johannes Schaub - litb    15 年前

    有时需要它显式地具有类型 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
    
        2
  •  6
  •   Jerry Coffin    15 年前

    我很少谈论速度(至少是直接的),但事实上,否则编译器会警告转换 double float .

        3
  •  3
  •   Matteo Italia    15 年前

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

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

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

    在pc机上,您可以在“正常”上下文中使用double,只是尽量避免在同一个表达式中混合数据类型(double、float、int…),以避免不必要的昂贵转换。无论如何,对于文本,编译器应该足够聪明,能够在编译时执行转换。