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

Chu*_*dad 15 c++ floating-point

可能重复:
为什么C没有无符号浮点数?

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

$ 3.9.1/8-"有三种浮点类型:float,double和long double."

AnT*_*AnT 28

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

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

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

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

  • 接受最后一句话的答案:“当然,从概念角度来看,为了一致性,在语言中使用无符号浮点类型是非常合乎逻辑的。但是,可惜它们不存在。 ” 尽管我不是 C++ 专家,但“重要到足以证明其存在”的推理似乎是正确的 (2认同)

Kor*_*icz 6

所有浮点都已签名.C++遵循IEEE 754标准,这是最常见的硬件实现,并且遵循它,浮点数始终是有符号的.

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