为什么没有无符号浮点类型?

时间:2010-08-28 06:01:24

标签: c++ floating-point

  

可能重复:
  Why doesn't C have unsigned floats?

问题可能是非常基本的,可能很早就回答了,但我想理解为什么C ++没有无符号浮点类型,即使浮点文字可以是有符号或无符号的。

  

$ 3.9.1 / 8-“有三个漂浮   点类型:float,double和long   双“。

2 个答案:

答案 0 :(得分:27)

无符号整数类型有两个重要的属性,它们将它们与有符号整数类型区分开来:“移位”范围(没有负的子范围,但是宽的子范围宽两倍)和模运算。对于整数类型,这些属性非常重要,足以证明无符号类型的存在。

对于浮动类型,这些属性都不能立即应用。对于浮点类型,主要问题不在于它们的范围(对于许多目的,它可以被认为是几乎无限的),而是精确的。模运算自然不适用于非整数类型。由于这个原因,引入无符号浮点类型没有多大意义,即在浮点表示中只触发一位的作用没有多大意义。

还应该注意,上述推理应该可以用作在流行的硬件和相应的硬件派生标准中引入无符号整数类型(并且不引入无符号浮点类型)的基本原理。我们在C和C ++中所拥有的基本上是从硬件功能和这些标准中继承而来。

当然,从概念角度来看,在语言中使用无符号浮点类型是合乎逻辑的,只是为了保持一致性。但是,唉,他们不在那里。

答案 1 :(得分:6)

所有浮点都已签名。 C ++遵循IEEE 754标准,这是最常见的硬件实现,在它之后,浮点数总是被签名。

由于浮点数已占用至少32位,因此与这种实现的有用性相比,具有重新获得1位的软件实现的收益是微不足道的。