可能重复:
实数 - 如何确定是否需要浮点数或双精度数?
我正在尝试检查从 double 到 float 的转换是否会导致精度损失。显然,我可以进行转换并将浮点数转换回双精度并将其与原始值进行比较。我很好奇是否有更直接的方法。
可能重复:
实数 - 如何确定是否需要浮点数或双精度数?
我正在尝试检查从 double 到 float 的转换是否会导致精度损失。显然,我可以进行转换并将浮点数转换回双精度并将其与原始值进行比较。我很好奇是否有更直接的方法。
转换为浮点数并返回通常是最有效的解决方案;在最常见的架构上,它只需要几个指令,每个指令都有几个周期的延迟。这也具有既简单又正确的优点。
在没有硬件支持浮点的平台上,您可以通过拆分数字并检查指数和有效数字是否适合单精度来更有效地进行检查,但这是一个相对不常见的极端情况,并且这更容易出错,并且不能移植到使用不同 FP 格式的平台上。
浮点数有两部分,尾数和指数。double 有更多的位分配给两个部分。将 double 分配给 float 会丢弃尾数位,这会降低精度,这是意料之中的。但是,如果双指数不适合浮点指数,那么浮点数将是一个垃圾值。