C++ 提供三种浮点类型:float、double 和 long double。我很少在我的代码中使用 float ,但是当我这样做时,我总是被诸如
之类的无害行上的警告所吸引float PiForSquares = 4.0;
问题是文字 4.0 是 double ,而不是 float - 这很烦人。
对于整数类型,我们有 short int、int 和 long int,这很简单。为什么 C 没有短 float 、 float 和长 float ? “double”到底是从哪里来的?
编辑: float 类型之间的关系似乎类似于整数。 double 必须至少与 float 一样大,long double 至少与 double 一样大。没有其他精度/范围保证。
最佳答案
术语“单精度”和“ double ”起源于 FORTRAN,并且在 C 发明时已经广泛使用。在 1970 年代早期的机器上,单精度效率明显更高,并且与今天一样,使用的内存是 double 的一半。因此它是 float 的一个合理的默认值。
long double
在很久以后才添加,当时 IEEE 标准允许 Intel 80287 浮点芯片使用 80 位 float 而不是经典的 64 位 double 。
提问者关于保证的说法不正确;今天几乎所有语言都保证以单精度(32 位)和 double (64 位)实现 IEEE 754 二进制 float 。有些还提供扩展精度(80 位),在C 中显示为long double
。由威廉·卡汉 (William Kahan) 带头的 IEEE 浮点标准是良好工程对权宜之计的胜利:在当时的机器上,它看起来非常昂贵,但在今天的机器上,它非常便宜,而且 IEEE 浮点的可移植性和可预测性- 点数每年必须节省数十亿美元。
关于c++ - 为什么 c/c++ 浮点类型的命名如此奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/399114/