C++提供了三种浮点类型:float,double和long double.我不经常在我的代码中使用浮点数,但是当我这样做时,我总是被类似无害线路上的警告所困扰
float PiForSquares = 4.0;
问题是文字4.0是双重的,而不是浮动的 - 这很刺激.
对于整数类型,我们有short int,int和long int,这非常简单.为什么C不具有短浮动,浮动和长浮动?在地球上"双重"来自哪里?
编辑:浮动类型之间的关系似乎与整数类似.double必须至少与float一样大,而long double至少与double一样大.没有其他精度/范围的保证.
术语"单精度"和"双精度" 起源于FORTRAN,并且在C被发明时已经广泛使用.在20世纪70年代早期的机器上,单精度显着提高了效率,而今天,使用的内存是双精度的一半.因此,它是浮点数的合理默认值.
long double
在IEEE标准允许使用80位浮点数而不是传统的64位双精度的英特尔80287浮点芯片时,很久以后就添加了它.
提问者对保证不正确; 今天,几乎所有语言都保证以单精度(32位)和双精度(64位)实现IEEE 754二进制浮点数.有些还提供扩展精度(80位),以C为单位显示long double
.由William Kahan带头的IEEE浮点标准是一个优秀工程胜过权宜之计的胜利:在当今的机器上,它看起来非常昂贵,但在今天的机器上它很便宜,并且IEEE浮动的便携性和可预测性点数必须每年节省数百美元.
你可能知道这一点,但你可以制作文字浮点数/长双打
float f = 4.0f; long double f = 4.0l;
Double是默认值,因为这是大多数人使用的.长双打可能是矫枉过正或浮球的精度非常差.Double适用于几乎所有应用程序.
为什么要命名?有一天,我们所拥有的是32位浮点数(实际上我们所拥有的只是定点数,但我离题了).无论如何,当浮点成为现代建筑中的流行特征时,C可能是当时的语言dujour,并且给出了名称"float".似乎有意义.
当时,可能已经考虑过double,但在当时的cpu/fp cpus中没有真正实现,这是16位或32位.一旦双人在更多的架构中使用,C可能会开始添加它.C需要一个名字,一个浮动大小的两倍,因此我们得到了一个双倍.然后有人需要更精确,我们认为他疯了.无论如何我们加了它.名称quadtuple(?)是矫枉过正的.长双足够好,没有人发出很多噪音.
令人困惑的部分原因是,良好的"int"似乎随着时间而变化.过去,"int"表示16位整数.但是,Float与IEEE标准绑定为32位IEEE浮点数.出于这个原因,C保持浮动定义为32位,并使得双倍和长倍指代更长的标准.