【发布时间】:2013-09-21 15:30:14
【问题描述】:
我有一些关于整数和浮点数的问题:
我可以将每个 32 位 无符号整数值存储到 64 位 IEEE 浮点值(这样当我将双精度值分配回int int 将包含原始值)?
不能存储在 32 位 IEEE 浮点值(与 1 中的定义相同)中的最小(大小)正整数和负整数是什么?
这些问题的答案是否取决于所使用的语言?
//编辑:我知道这些问题听起来有点像一些测试,但我之所以问这些问题是因为我需要对数据格式定义做出一些决定
【问题讨论】:
我有一些关于整数和浮点数的问题:
我可以将每个 32 位 无符号整数值存储到 64 位 IEEE 浮点值(这样当我将双精度值分配回int int 将包含原始值)?
不能存储在 32 位 IEEE 浮点值(与 1 中的定义相同)中的最小(大小)正整数和负整数是什么?
这些问题的答案是否取决于所使用的语言?
//编辑:我知道这些问题听起来有点像一些测试,但我之所以问这些问题是因为我需要对数据格式定义做出一些决定
【问题讨论】:
double 而不会丢失信息。尾数有 53 位的精度,这就足够了。float 具有 24 位尾数,因此具有唯一表示的最大和最小整数是 2^24-1 和 -2^24+1(16777215 和 -16777215)。更大的数字没有唯一的表示;例如16777216 == (float)16777217。【讨论】:
float,然后分配给 int,您将得到 2^24。但是,如果您将 2^24+1 分配给 float,然后分配给 int,您也会得到 2^24。也就是说,如果你返回 2^24,你就无法知道它原来是哪个数字。