为什么c / c ++浮点类型如此奇怪地命名?
C ++提供三种浮点类型:float,double和long double。 我很少在代码中使用浮点数,但是当我这样做时,我总是被无害线条上的警告所吸引
float PiForSquares = 4.0;
问题是,文字4.0是一个双重的,而不是一个浮动 - 这是令人生气的。
对于整数类型,我们有短整型,整型和长整型,这很简单。 为什么不C只有短浮动,浮动和长浮动? 而在地球上“双”来自哪里?
编辑:它似乎浮动类型之间的关系类似于整数。 双倍必须至少与浮动一样大,而长双倍至少与双倍一样大。 没有其他的精度/范围保证。
术语“单精度”和“双精度” 起源于FORTRAN ,当C发明时已经被广泛使用。 在二十世纪七十年代早期的机器上, 单精度显着提高了效率,并且像今天一样,使用了双精度内存的一半。 因此这是浮点数的合理默认值。
当IEEE标准为英特尔80287浮点芯片提供了许可时, 很久以后又增加了 long double
,后者使用80位浮点数而不是传统的64位双精度。
提问者对保证不正确; 今天几乎所有语言都保证以单精度(32位)和双精度(64位) 实现IEEE 754二进制浮点数 。 有些还提供了扩展精度 (80位),它在C中显示为long double
。 由威廉卡汉率先推出的IEEE浮点标准是一个好的工程技术胜过的胜利:在当今的机器上,它看起来过于昂贵,但在今天的机器上它便宜,并且IEEE浮动的可移植性和可预测性点数必须每年节省超过1美元的美元。
你可能知道这一点,但你可以做字面浮动/长双打
float f = 4.0f;
long double f = 4.0l;
Double是默认值,因为那是大多数人使用的。 长双打可能是矫枉过正或者漂浮物的精确度很差。 双工适用于几乎所有应用程序。
为什么命名? 有一天,我们所有的都是32位浮点数(实际上我们所有的都是定点数,但我离题了)。 无论如何,当浮点成为现代建筑中的流行特征时,C当时可能是dujour的语言,并且给出了“float”这个名字。 似乎是有道理的。
那时候,double可能已经被想到了,但并没有真正在当时的cpu / fp cpus中实现,这是16或32位。 一旦双层结构用于更多架构,C可能会加入它。 C需要一个浮点大小两倍的名称,因此我们得到了一个双倍的名称。 然后有人需要更精确的,我们认为他疯了。 无论如何我们都添加了它。 quadtuple(?)的名字是过度杀毒。 Long double已经足够好了,没有人发出很多噪音。
部分困惑是好的“int”似乎随着时间而改变。 它曾经是“int”意思是16位整数。 然而,Float与IEEE标准绑定为32位IEEE浮点数。 出于这个原因,C保持浮动定义为32位,并使双倍和长双重指向更长的标准。
字面
问题是,文字4.0是一个双重的,而不是一个浮动 - 这是令人生气的。
有了常量,整数和浮点数之间就有一个重要的区别。 尽管决定使用哪种整数类型(您选择的最小值足以保存该值,但对于有符号/无符号而言增加了一些复杂性)相对容易,但使用浮点数并非易事。 许多值(包括简单的值如0.1)不能用浮点数精确表示,因此类型的选择不仅会影响性能,还会影响结果值。 看起来C语言设计人员更喜欢在这种情况下对性能的稳健性,因此他们决定默认表示应该更精确。
历史
为什么不C只有短浮动,浮动和长浮动? 而在地球上“双”来自哪里?
术语“单精度”和“双精度”起源于FORTRAN,当C发明时已经被广泛使用。
链接地址: http://www.djcxy.com/p/58325.html