当前位置:  开发笔记 > 编程语言 > 正文

为什么c/c ++浮点类型如此奇怪的命名?

如何解决《为什么c/c++浮点类型如此奇怪的命名?》经验,为你挑选了2个好方法。

C++提供了三种浮点类型:float,double和long double.我不经常在我的代码中使用浮点数,但是当我这样做时,我总是被类似无害线路上的警告所困扰

float PiForSquares = 4.0;

问题是文字4.0是双重的,而不是浮动的 - 这很刺激.

对于整数类型,我们有short int,int和long int,这非常简单.为什么C不具有短浮动,浮动和长浮动?在地球上"双重"来自哪里?

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



1> Norman Ramse..:

术语"单精度"和"双精度" 起源于FORTRAN,并且在C被发明时已经广泛使用.在20世纪70年代早期的机器上,单精度显着提高了效率,而今天,使用的内存是双精度的一半.因此,它是浮点数的合理默认值.

long double在IEEE标准允许使用80位浮点数而不是传统的64位双精度的英特尔80287浮点芯片时,很久以后添加了它.

提问者对保证不正确; 今天,几乎所有语言都保证以单精度(32位)和双精度(64位)实现IEEE 754二进制浮点数.有些还提供扩展精度(80位),以C为单位显示long double.由William Kahan带头的IEEE浮点标准是一个优秀工程胜过权宜之计的胜利:在当今的机器上,它看起来非常昂贵,但在今天的机器上它很便宜,并且IEEE浮动的便携性和可预测性点数必须每年节省数百美元.


c ++有一个标志来查看是否实现了ieee754:numeric_limits :: is_iec559
类似地,C99具有__STDC_IEC_559__宏,但这些只是测试实现是否声称使用IEEE.当C/C++不保证IEEE浮点时,我反对的是"提问者对保证不正确"的陈述.

2> Doug T...:

你可能知道这一点,但你可以制作文字浮点数/长双打

 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位,并使得双倍和长倍指代更长的标准.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有