C ++中的无符号双精度?


68

为什么C ++不支持无符号双语法?


3
哪些语言支持它?它认为通常假定您使用的是任何类型的浮点,那么实际上几乎不需要unsigned。
SteelBytes 2010年

Answers:


71

因为典型的浮点格式不支持无符号数字。例如,请参阅此IEEE 754格式列表

添加通用硬件不支持的数字格式只会使编译器编写者的工作变得困难,并且认为这样做不值得。


2
同样的想法是浮点数。也就是说任何数量应该表示的,包括负整数出无穷。无符号数字会适得其反。
unixman83 '04

28
嗯,不,那不是重点。或者,如果这是点,那么所有浮点类型注定会失败。可以在计算机中以有意义的方式表示的一组数字是可数的……
Brennan Vincent

16

C ++不支持无符号浮点类型,因为大多数浮点硬件都不支持无符号浮点类型。某些图形卡确实可以使用无符号浮点,但是它通常是内部的,对于程序或用户而言并不真正可见。


7

无符号整数获得额外的精度,并且与带符号整数的位语义略有不同。浮点数和双精度数总是为符号保留一点(在大多数硬件上),并且没有按位语义,因此拥有无符号实数类型并没有真正的好处。


11
从理论上讲,您可以将该位用于尾数或指数,但可以增加范围或精度。
乔伊

2
好吧,我想要一个无符号双精度型来控制它始终是一个正数,而无需继续检查它。是的,有好处。
丹尼尔·瑞安

@Јοеу:(很抱歉,我的回复很晚。)是的,这会有所帮助,但问题是C ++中缺少无符号双精度型。这与为什么硬件不支持它无关。在不增加硬件支持的情况下将概念添加到C ++不会带来任何好处。
马塞洛·坎托斯

2
当然,使用无符号双精度类型是有原因的-更好的类型安全性。
本杰明·格伦鲍姆

1
@BenjaminGruenbaum您可以编写unsigned float x = -3;并让编译器抱怨。但是,如果您从一个较小的数字中减去一个较大的数字,则大多数硬件将比无符号int捕获到的溢出更多。因此,是的,我承认可能会有好处,但这将是非常微不足道的。
马塞洛·坎托斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.