C++中的无符号双精度数是什么?

75

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


3
哪些编程语言支持它?如果使用任何类型的浮点数,通常认为几乎不需要使用无符号。 - SteelBytes
3个回答

76
因为典型的浮点数格式不支持无符号数。例如,请参阅IEEE 754格式列表
添加一种数值格式,这种格式没有被常见硬件支持,会给编译器编写者带来麻烦,并且可能不被认为是值得努力的。

2
同时,这个想法是使用浮点数。任何数字都应该可以表示,包括负整数到无穷大。无符号数对于实现这个目标是不利的。 - unixman83
32
嗯,不,那不是重点。如果这是重点,那么所有浮点类型都注定会失败。在计算机中可以以有意义的方式表示的数字集是可数的... - Brennan Vincent

19

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


7

无符号整数比有符号整数多了一位精度,并且具有略微不同的按位语义。浮点数和双精度浮点数始终为符号保留一位(在大多数硬件上),并且没有按位语义,因此使用无符号实数类型没有实际好处。


13
理论上,你可以使用那一位来表示尾数或指数,从而增加范围或精度。 - Joey
2
我想要一个无符号双精度浮点数来控制它始终是正数,而不需要继续检查它。所以确实有好处。 - Daniel Ryan
@Јοеу:(很抱歉回复晚了。)是的,这会有帮助,但问题是关于C ++中无符号双精度的缺乏,而不是为什么硬件不支持它。在C ++中添加该概念,而不在硬件中添加对其的支持将毫无意义。 - Marcelo Cantos
@Zammbi:根据我对Joey的回应,如果没有硬件跟进,将这样的东西添加到C++中是毫无意义的。您不会得到信号下溢,因此您必须在代码中执行此类检查。无论您还是编译器这样做,都会导致无法接受的性能损失。 - Marcelo Cantos
3
无符号双精度类型的存在当然是有原因的 - 更好的类型安全性。 - Benjamin Gruenbaum
1
@BenjaminGruenbaum 你可以写 unsigned float x = -3;,但编译器会报错。但是如果从一个较大的数中减去一个较小的数,大多数硬件都不会像对待无符号整数一样检测溢出。所以,是的,我承认可能会有一些好处,但非常微小。 - Marcelo Cantos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接