2013-01-08 56 views
3

可能重复:
Real numbers - how to determine whether float or double is required?如何判断双精度浮点数是否可以安全地存储为单精度浮点数?

我想检查是否从双浮动转换将导致精度损失。很显然,我可以进行转换并将float重新转换为double并将其与原始值进行比较。我很好奇是否有更直接的方法。

+0

相关:http://stackoverflow.com/questions/11772776/how-are-double-precision-floating-point-numbers-converted-to-single-precision-fl – NominSim

+0

答案在这里,如果你这样做有点数学问题:http://stackoverflow.com/questions/5098558/float-vs-double-precision –

+0

请澄清。什么是安全的?你总是失去一点点;你是否认为丢失位是安全的,当且仅当它们都被设置为0? – MSalters

回答

8

转换为浮动和返回通常是最有效的解决方案;在大多数常见的体系结构中,它只需要几条指令,延迟时间为几个周期。这也有简单和正确的美德。

在没有硬件支持浮点的平台上,可以通过拆分数字并检查指数和有效值是否适合单精度来更有效地进行检查,但这是一个相对不常见的角落这种情况更容易出错,不能移植到使用不同FP格式的平台上。

0

浮点数有两部分,尾数和指数。一个double有更多的位分配给这两个部分。分配一个双精度浮点数将会减少尾数位,这会给你更少的精度数字,这是可以预料的。但是,如果双指数不适合float指数,那么float将是一个垃圾值。

+3

“如果双指数不适合float指数,那么float将是一个垃圾值”转换为float“一个双指数太低的代表应该给0(或者一个subnormal if有效位的某些位仍然可以用“float”低于正常值表示)。转换一个指数太高的'double'应该给+ inf或-inf。 –

+0

从来不知道。谢谢! –