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

C++ 为什么没有无符号浮点类型?,c++,floating-point,C++,Floating Point,可能重复: 这个问题可能是非常基础的,可能在很多时候回答,但是我想理解为什么C++没有浮点浮点类型,即使浮点文字可以被签名或没有签名。 $3.9.1/8-“有三个浮动 点类型:浮动、双点和长点 加倍。” 所有浮点都是有符号的。C++遵循标准,这是最常见的硬件实现,遵循它,浮动总是签名。 由于浮点数已经占用了至少32位,因此,与这种实现的可用性相比,重新获得该1位的软件实现所带来的好处是微不足道的。无符号整数类型有两个重要属性,可以将其与有符号整数类型区分开来:“移位”范围(没有负的子范围,但正

可能重复:

这个问题可能是非常基础的,可能在很多时候回答,但是我想理解为什么C++没有浮点浮点类型,即使浮点文字可以被签名或没有签名。 $3.9.1/8-“有三个浮动 点类型:浮动、双点和长点 加倍。”


所有浮点都是有符号的。C++遵循标准,这是最常见的硬件实现,遵循它,浮动总是签名。
由于浮点数已经占用了至少32位,因此,与这种实现的可用性相比,重新获得该1位的软件实现所带来的好处是微不足道的。

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

对于浮点类型,这两个属性都不立即适用。对于浮点类型,主要问题不在其范围内(在许多情况下,它可以被视为实际上是无限的),但精度更高。而且模运算自然不适用于非整数类型。因此,引入无符号浮点类型没有多大意义,即,在浮点表示中仅转换一位的作用没有多大意义

还应注意,上述推理可能应被用作引入无符号整数类型(而不是引入无符号浮点类型)的基本原理在流行的硬件和相应的硬件衍生标准中,我们在C和C++中的东西基本上是从硬件能力和这些标准继承的。
当然,从概念的角度来看,为了保持一致性,在语言中使用无符号浮点类型是合乎逻辑的。但是,遗憾的是,它们不存在。

@Greg Hewgill:Yup,更改了标题buddy。@Greg Hewgill:根据您的注释进行更新。浮点文本总是根据类型进行签名。Whet她或不是你显式地以+/-作为前缀不会改变这一点,而以U或LU作为后缀是一个错误,因为你会用整型文字来强制类型。@Thilo:谢谢你指出线程。我在谷歌搜索时没有发现它。是的,我想你们中的一个可以将其标记为关闭。我会省略“默认情况下”基本上,我在寻找一种避免双精度/浮点型变量出现负值的方法,比如说“unsigned double”@chubsdad,好吧,即使它们是无符号的,FPE也不是我所说的“避免”:。顺便说一下,有一个增强库,它是这样做的。虽然大多数C++实现都使用IEEE-74浮点表示,但我认为这不是由C++标准强制执行的。否则,在一致性实现中,
std::numeric\u limits::is\u iec559
无法计算为除true以外的任何值。这将给使用专有浮点表示的体系结构(如Cray和IBM大型机)带来问题。(虽然这与chubsdad的问题没有什么区别。)在最后一句话中接受这个答案:“当然,从概念的角度来看,仅仅为了一致性,在语言中使用无符号浮点类型是非常合乎逻辑的。但是,遗憾的是,它们不存在。”还有关于“重要到足以证明存在性”似乎是对的,尽管我不是C++方面的专家,但值得注意的是,从较小的无符号值中减去较大的无符号值的行为是定义良好的,但是从较小的浮点值中减去较大的浮点值没有明确的意义,除非报告一个负结果。