Floating point 大整数到单点浮点

Floating point 大整数到单点浮点,floating-point,integer,mantissa,single-precision,Floating Point,Integer,Mantissa,Single Precision,我正在尝试将一个大整数转换为32位单精度浮点,但我无法克服这个问题。如果大整数的二进制表示大于23位尾数,该怎么办 例如,以整数1671277287为例 其二进制表示为01100011100111010101011100111 我的理解是,将小数点向左移动,直到它的左边只有1位,如下所示: 01.100011100111010101011100111 我的问题是这个尾数是30位,一个精度浮点只能容纳23位尾数。我已经试着寻找这个特定的问题,但我没有找到任何东西。我将如何处理这个问题 编辑:找出一

我正在尝试将一个大整数转换为32位单精度浮点,但我无法克服这个问题。如果大整数的二进制表示大于23位尾数,该怎么办

例如,以整数1671277287为例

其二进制表示为01100011100111010101011100111

我的理解是,将小数点向左移动,直到它的左边只有1位,如下所示:

01.100011100111010101011100111

我的问题是这个尾数是30位,一个精度浮点只能容纳23位尾数。我已经试着寻找这个特定的问题,但我没有找到任何东西。我将如何处理这个问题

编辑:找出一些信息,以防其他人有此问题。单精度浮点的默认舍入为“舍入到最近值,舍入到偶数”。另一个StackOverflow发布了关于如何轻松做到这一点的评论


这个问题相当于如何将1000_1110_0111_0110_1010_1011_1001_11四舍五入到23位。我将假设通常的默认舍入模式,即舍入到最近,舍入到偶数作为平局断路器

最高有效23位为1000_1110_0111_0110_1010_101。丢失的最高有效位为1,并且存在较低有效位的非零位

一般规则是:

  • 如果第一个舍入位为0,则向下舍入
  • 如果第一个丢弃的位为1,且低有效位均为零,则四舍五入为偶数
  • 如果第一个丢弃的位是1,并且存在低有效性非零位,则向上取整

这些规则中的第三条适用于这里,因此您应该将其四舍五入到1000_1110_0111_0110_1010_110

您没有遗漏任何内容-32位单精度浮点的精度有效位数(6-7位小数)少于32位整数,因为它只有23位尾数。因此,在您的示例中,这些最低有效位将突出“下降”结尾。请注意,假设IEEE754,由于隐含的前导1,您有24位。但这仍然不等于30位,所以要做到这一点的方法是适当地四舍五入-即w.r.t.IEEE754四舍五入模式,默认值是四舍五入到最近,平齐到偶数。@PaulR所以30位尾数“100011100111010101011111”只是“10001110011101101010101”,最右边的7位被去掉了吗?@AlexAnderson:是的,差不多,尽管您通常会应用舍入,而不仅仅是截断尾数,如上面的注释所述。