为什么C没有未签名的浮点数?

我知道,这个问题似乎很奇怪。程序员有时想太多。请阅读…

在C我使用有符号和无符号整数很多。我喜欢的事实,编译器警告我,如果我做的事情,如分配一个有符号整数到无符号变量。我得到警告,如果我比较有符号无符号整数和更多。

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

为什么我们没有同样的奢侈品漂浮?平方根绝对不会返回负数。还有其他地方,一个负浮点值没有意义。完美的候选无符号浮点。

Btw – 我真的不是真的渴望一个额外的精度,我可以通过从浮动删除符号标志。我很高兴与浮游物,因为他们现在。我只是想标记一个浮点为无符号有时,并得到同样的警告,我得到与整数。

我不知道任何支持无符号浮点数的编程语言。

任何想法为什么他们不存在?

编辑:我知道x87 FPU没有处理无符号浮点的指令。让我们只使用带符号的float指令。误用(例如,低于零)可以被认为是未定义的行为,其方式与有符号整数的溢出未定义相同。

为什么C不支持未签名的浮点数是因为没有相当的机器码操作来执行CPU。因此,支持它是非常低效的。

如果C支持它,那么你有时会使用一个未签名的浮动,而不是意识到你的性能刚刚被杀死。如果C支持它,那么每个浮点操作将需要检查以查看它是否被签名。对于做数百万个浮点运算的程序,这是不能接受的。

所以问题是为什么硬件实现者不支持它。我认为答案是没有最初定义的未签名浮动标准。由于语言喜欢向后兼容,即使它是添加的语言也不能使用它。要看到浮点规格,你应该看看IEEE standard 754 Floating-Point

你可以绕过没有一个无符号浮点类型,虽然通过创建一个无符号浮点类封装一个浮点数或双精度和抛出警告,如果你尝试传递一个负数。这是效率较低,但是如果你不强烈地使用它们,你不会在乎这种轻微的性能损失。

我肯定看到有一个无符号浮点的有用性。但是C / C倾向于选择最适合每个人的效率,而不是安全。

http://stackoverflow.com/questions/512022/why-doesnt-c-have-unsigned-floats

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:为什么C没有未签名的浮点数?