C++ 为什么是c/c++;浮点类型的名称如此奇怪?

C++ 为什么是c/c++;浮点类型的名称如此奇怪?,c++,c,floating-point,history,ieee-754,C++,C,Floating Point,History,Ieee 754,C++提供三种浮点类型:浮点型、双精度型和长双精度型。我很少在我的代码中使用浮点,但当我这样做时,我总是被无害行上的警告所吸引,比如 float PiForSquares = 4.0; 问题是,literal4.0是一个double,而不是float,这令人恼火 对于整数类型,我们有short int、int和long int,这非常简单。为什么C没有短浮点数,浮点数和长浮点数?“双倍”究竟从何而来 编辑:似乎浮点类型之间的关系与整数之间的关系相似。double必须至少和float一样大,而l

C++提供三种浮点类型:浮点型、双精度型和长双精度型。我很少在我的代码中使用浮点,但当我这样做时,我总是被无害行上的警告所吸引,比如

float PiForSquares = 4.0;
问题是,literal4.0是一个double,而不是float,这令人恼火

对于整数类型,我们有short int、int和long int,这非常简单。为什么C没有短浮点数,浮点数和长浮点数?“双倍”究竟从何而来


编辑:似乎浮点类型之间的关系与整数之间的关系相似。double必须至少和float一样大,而long double至少和double一样大。没有其他精度/范围的保证。

您可能知道这一点,但您可以进行文字浮动/长双倍

 float f = 4.0f;
 long double f = 4.0l;
Double是默认值,因为大多数人都使用Double。长双打可能是杀伤力过大,而浮动的精度非常差。Double适用于几乎所有应用程序

为什么命名?有一天我们只有32位浮点数(实际上我们只有固定点数,但我离题了)。不管怎么说,当浮点成为现代体系结构中的一个流行特性时,C很可能是当时的语言dujour,并被命名为“float”。似乎有道理

当时,可能已经想到了double,但在当时的cpu/fp cpu(16或32位)中没有真正实现。一旦double在更多的体系结构中被使用,C可能会着手添加它。C需要一个两倍于浮点大小的名称,因此我们得到了一个双精度的。然后有人需要更精确,我们认为他疯了。我们还是加了。四元组(?)这个名字太夸张了。长双人足够好了,没有人发出很大的噪音


部分混淆是好的ole“int”似乎随着时间而变化。过去,“int”表示16位整数。但是,Float作为32位IEEE浮点数绑定到。因此,C将浮点定义为32位,并使双和长双引用更长的标准。

< P>首先,这些名称不是针对C++的,而是对于实现IEEE 754的任何浮点数据类型来说非常常见的。
名称“double”指的是“双精度”,而float通常被称为“单精度”。

两种最常见的浮点格式使用32位和64位,较长的一种是第一种格式大小的“两倍”,因此被称为“double”。

double是“双精度”的缩写。
我猜,长双精度是因为处理器上开始出现精度更高的浮点类型时,不想再添加一个关键字。

好的,过去是这样的:

最初用于C语言的机器将16位字分成2个字节,字符是1个字节。地址是16位,所以
sizeof(foo*)
是2,
sizeof(char)
是1。整数是16位,因此
sizeof(int)
也是2位。接着出现了VAX(扩展寻址)机器,地址是32位。char仍然是1字节,但是
sizeof(foo*)
现在是4字节

在Berkeley编译器中出现了一些混乱,因此short现在是2字节,int是4字节,因为这些都非常适合高效的代码。A变成了8字节,因为有一种有效的8字节块寻址方法,称为双字。4字节块是字,当然,2字节块是半字


浮点数的实现是这样的,它们适合于单字或双字。为了保持一致,双字浮点数随后被称为“double”。

之所以将double命名为double,是因为它的“精度”是浮点的两倍。实际上,这意味着它使用的空间是浮点值的两倍——如果您的浮点值是32位,那么您的双精度浮点值将是64位

double precision这个名称有点用词不当,因为双精度浮点的尾数精度为52位,而单精度浮点的尾数精度为23位(double即56位)。有关浮点的更多信息,请参见:,包括 底部链接到关于单精度和双精度浮动的文章


long double的名称可能与整数类型的长整数与短整数的名称相同,但在这种情况下,他们将其颠倒,因为“int”等同于“long int”。

应该注意的是,
double
不必能够保持比
float
更大的值;它只需要更精确。

在定点表示法中,小数点后有固定数量的数字(十进制表示法中小数点的泛化)。与此相反,浮点表示法的基数可以在所表示数字的位数内移动或浮动。因此名为“浮点表示法”。缩写为“浮点”

在K&R C中,
float
指的是具有32位二进制表示的浮点表示,
double
指的是具有64位二进制表示的浮点表示,或者是名称大小和位置的两倍。然而,最初的K&R规范要求所有浮点计算都以双精度完成

最初的IEEE 754标准(IEEE 754-1985)是浮点表示和算术的黄金标准,它为单精度和双精度浮点数的二进制表示提供了定义。双精度数字是一个恰当的名称,因为它们的位数是单精度数字的两倍

有关浮点表示的详细信息,请阅读David Goldberg的《每台计算机的科学原理》