gpt4 book ai didi

c - 为什么 C 没有无符号 float ?

转载 作者:行者123 更新时间:2023-11-30 16:28:31 25 4
gpt4 key购买 nike

我知道,这个问题似乎很奇怪。程序员有时候想得太多了。请继续阅读...

在 C 中,我经常使用有符号无符号整数。我喜欢这样一个事实:如果我执行诸如将有符号整数分配给无符号变量之类的操作,编译器会发出警告。如果我比较有符号整数和无符号整数等等,我会收到警告。

我喜欢这些警告。它们帮助我保持代码正确。

为什么我们没有同样奢华的花车?平方根绝对不会返回负数。还有其他地方负浮点值没有意义。无符号 float 的完美候选者。

顺便说一句 - 我不太热衷于通过从 float 中删除符号位来获得额外的精度。我对现在的 float 非常满意。有时我只是想将 float 标记为无符号,并得到与整数相同的警告。

我不知道有任何编程语言支持无符号 float 。

知道为什么它们不存在吗?

<小时/>

编辑:

我知道 x87 FPU 没有处理无符号 float 的指令。让我们只使用带符号的浮点指令。误用(例如低于零)可以被视为未定义行为,就像有符号整数的溢出未定义一样。

最佳答案

为什么 C++ 不支持无符号 float ,是因为没有等效的机器代码操作可供 CPU 执行。所以支持它的效率会非常低。

如果 C++ 确实支持它,那么您有时会使用无符号 float ,而没有意识到您的性能已被杀死。如果 C++ 支持它,那么每个浮点运算都需要检查它是否有符号。而对于进行数百万次浮点运算的程序来说,这是 Not Acceptable 。

所以问题是为什么硬件实现者不支持它。我认为答案是最初没有定义无符号浮点标准。由于语言喜欢向后兼容,即使添加了语言也无法利用它。要查看浮点规范,您应该查看 IEEE standard 754 Floating-Point .

您可以通过创建一个封装 float 或 double 的无符号浮点类来解决没有无符号浮点类型的问题,并在尝试传入负数时抛出警告。这效率较低,但如果您不频繁使用它们,您可能不会关心这种轻微的性能损失。

我确实看到了无符号 float 的用处。但 C/C++ 倾向于选择最适合每个人的效率而不是安全性。

关于c - 为什么 C 没有无符号 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52348015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com