【问题标题】:Unsigned double in C++?C ++中的无符号双精度数?
【发布时间】:2011-02-01 03:43:55
【问题描述】:

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

【问题讨论】:

  • 哪些语言支持它?它认为通常假设如果您使用任何类型的浮点,那么几乎不需要无符号。

标签: c++ double unsigned


【解决方案1】:

因为典型的浮点格式不支持无符号数。例如,请参阅this list of IEEE 754 formats

添加普通硬件不支持的数字格式只会让编译器编写者的生活变得困难,而且可能不值得付出努力。

【讨论】:

  • 另外,idea 是浮点数。 Any 数应该是可表示的,包括无穷大的负整数。无符号数会适得其反。
  • 呃,不,这不是重点。或者如果是点,那么所有的浮点类型都注定要失败。可以在计算机中以有意义的方式表示的一组数字是可数的......
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 理论上您可以使用该位作为尾数或指数,但可以增加范围或准确性。
    • 嗯,我想要一个无符号双精度数来控制它始终是一个正数,而无需继续检查它。所以是的,有好处。
    • @Јοеу:(抱歉,回复晚了。)是的,这会有所帮助,但问题是 C++ 中缺少无符号双精度数。这不是关于为什么硬件不支持它。将概念添加到 C++ 中而不在硬件中添加对它的支持将一无所获。
    • 无符号双精度类型当然有一个原因 - 更好的类型安全性。
    • @BenjaminGruenbaum 你可以写unsigned float x = -3; 并让编译器抱怨。但是如果你从一个较小的数字中减去一个较大的数字,大多数硬件将不会像 unsigned int 那样捕获溢出。所以,是的,我承认可能会有好处,但它会非常微不足道。
    猜你喜欢
    • 2019-06-07
    • 2015-12-02
    • 2015-05-17
    • 2015-02-21
    • 2017-10-17
    • 2014-02-04
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多