首页 > 解决方案 > 在 C++ 中如何定义从整数到浮点的精度损失?

问题描述

我对下面的代码片段有疑问:

long l=9223372036854775807L;
float f=static_cast<float>(l);

long 值不能完全根据 IEEE754 表示。

我的问题是如何处理有损转换:

  1. 是否采用最近的浮点表示?
  2. 是否采用下一个更小/更大的表示?
  3. 还是采取了其他方法?

我知道这个问题 在将 int 转换为 float 时在后台会发生什么,但这并不能回答我的问题。

标签: c++floating-pointroundingstatic-cast

解决方案


这里

整数或无范围枚举类型的纯右值可以转换为任何浮点类型的纯右值。如果该值不能正确表示,则由实现定义是否选择最接近的较高或最接近的较低可表示值,尽管如果支持 IEEE 算法,则舍入默认为最接近。如果该值不适合目标类型,则行为未定义。如果源类型为 bool,则值 false 转换为 0,值 true 转换为 1。

至于 IEEE 754 的四舍五入规则,似乎有五个。不过,我找不到任何有关在哪种情况下使用哪些信息的信息。看起来这取决于实现,但是,您可以在 C++ 程序中设置舍入模式,如此处所述


推荐阅读