重新解释无符号整型范围[uint(a1)uint(a2)]到浮点范围[float(a1)float(a2)]的位串是可能的吗?
问题描述:
嗨重新诠释一个可能最终有一个有效的浮点数位的32位字符串时:重新解释无符号整型范围[uint(a1)uint(a2)]到浮点范围[float(a1)float(a2)]的位串是可能的吗?
UINT:1101004800,浮动:20.000000
现在说我是一个静态分析工具的工作它定义了值的范围而不是单个值的操作。
我正在考虑的一个这样的操作是将无符号值的32位位串值重新解释为浮点数。
当转换为float [float(a1)float(a2)]时,两个无符号整数[uint(a1)uint(a2)]的范围仍然是一个连续范围?
我知道float对于NaN,infinity有特殊的值。但是否则这个范围转换是否成立?
下面的数字将表明它是这样的:
int: 1101004800, float: 20.000000
int: 1101004801, float: 20.000002
int: 1101004802, float: 20.000004
int: 1101004803, float: 20.000006
int: 1101004804, float: 20.000008
int: 1101004805, float: 20.000010
int: 1101004806, float: 20.000011
int: 1101004807, float: 20.000013
int: 1101004808, float: 20.000015
int: 1101004809, float: 20.000017
我读过here说,“比特序列,允许浮点数字进行比较,并解释它们为整数时,即使分类正确。 “
答
它可以工作到fmax表示,但不能更进一步(浮点数有符号幅度的表示形式,所以顺序会反转为负数)。
0000 0000 -> 0.0
...
7F7F FFFF -> fmax
7F80 0000 -> +Inf
7F80 0001 - 7FFF FFFF -> NaN
8000 0000 -> -0.0
...
FF7F FFFF -> -fmax
FF80 0000 -> -Inf
FF80 0001 - FFFF FFFF -> NaN
但是意图是什么?你将在那些不能在整数上执行的范围上执行什么操作?