Floating point 整数和浮点数的二进制表示:是否存在单调递增的一对一对应关系?

Floating point 整数和浮点数的二进制表示:是否存在单调递增的一对一对应关系?,floating-point,binary,integer,Floating Point,Binary,Integer,在处理一个遗留系统时,我需要使用一个只接受double作为输入的函数来存储整数,我遇到了以下问题。我们得到一个二进制数,例如: 00111111 110000000000000000000000 如果我们将其表示为整数,则该数字为1069547520。如果我们将其表示为IEEE 754浮点数,则为1.5。很容易看出,整数和IEEE 754浮点数之间存在一对一的对应关系。我的问题如下。给定两个整数a和b,以及它们对应的IEEE 754浮点对应项a和b,a>b是否意味着a>b 我想答案是肯定的,但我

在处理一个遗留系统时,我需要使用一个只接受double作为输入的函数来存储整数,我遇到了以下问题。我们得到一个二进制数,例如:

00111111 110000000000000000000000

如果我们将其表示为整数,则该数字为1069547520。如果我们将其表示为IEEE 754浮点数,则为1.5。很容易看出,整数和IEEE 754浮点数之间存在一对一的对应关系。我的问题如下。给定两个整数a和b,以及它们对应的IEEE 754浮点对应项a和b,a>b是否意味着a>b


我想答案是肯定的,但我缺乏有力的论据支持。有什么提示吗?

正IEEE 754二进制32数字映射为递增整数

然而:

  • IEEE 754表示为符号幅度,因此负二进制32数字映射为递减整数。如果映射到无符号int32s,则负浮点数映射到正浮点数之上(如果要对浮点数进行位旋转,也可以将它们映射到无符号int32s)

  • IEEE 754具有
    +0.0
    -0.0
    ,对于某些浮点定义的“equal”是相等的,但映射到非常不同的整数(分别是
    0
    ,如果映射到有符号的32位整数类型,
    int\u MIN

  • IEEE 754有几种NaN表示,它们映射到不同的整数

  • 这假设浮点和整数表示具有相同的endianness。给他们相同的endianness有很多好处,但举个例子,ARM在历史上一直用endianness做奇怪的事情,所以我应该指出这一点


正IEEE 754二进制32数字映射为递增整数

然而:

  • IEEE 754表示为符号幅度,因此负二进制32数字映射为递减整数。如果映射到无符号int32s,则负浮点数映射到正浮点数之上(如果要对浮点数进行位旋转,也可以将它们映射到无符号int32s)

  • IEEE 754具有
    +0.0
    -0.0
    ,对于某些浮点定义的“equal”是相等的,但映射到非常不同的整数(分别是
    0
    ,如果映射到有符号的32位整数类型,
    int\u MIN

  • IEEE 754有几种NaN表示,它们映射到不同的整数

  • 这假设浮点和整数表示具有相同的endianness。给他们相同的endianness有很多好处,但举个例子,ARM在历史上一直用endianness做奇怪的事情,所以我应该指出这一点


我想这与IEEE 754 binary64是一样的,对吗?@Joannofe是的,同样适用于binary64和64位整数。Pascal所说的另一种说法是:对于相同符号的浮点数:1.相邻浮点数有相邻的整数表示2.增加浮点数的整数表示将移动到下一个可表示的浮点数,远离零、N、无穷大、负数和次正态数(一些浮点单位将非常小的数字刷新为零)都会使这一切变得复杂。我在这里更详细地讨论了这一点:我想IEEE 754 binary64也是这样,对吗?@Joannofe是的,这同样适用于二进制64位和64位整数。Pascal所说的另一种说法是:对于相同符号的浮点:1.相邻的浮点具有相邻的整数表示2.增加浮点的整数表示将移动到下一个可表示的浮点,远离零、N、无穷大、负数和次正态数(一些浮点单位将非常小的数字刷新为零)都会使这一切变得复杂。我将在这里更详细地介绍这一点: