【问题标题】:Questions about 32 bit float values关于 32 位浮点值的问题
【发布时间】:2014-11-22 00:25:46
【问题描述】:

是否可以将所有 16 位无符号整数(无符号短整数)值完全存储在 32 位浮点值中? 所有 32 位无符号整数 (unsigned int) 值都可以完全存储在 32 位浮点值中吗? 下面哪些数字可以用 32 位浮点值精确表示? 1.648、2.75、2.125、10.999、9.351、0.625

【问题讨论】:

  • 课堂上没有讲过吗?

标签: floating-point integer


【解决方案1】:
  • -224 和 224 之间的所有整数都可以表示为单精度浮点数。
  • -224-1 和 224+1 都不能表示为浮点数。

因此,所有无符号 16 位整数都可以完全表示为浮点数,但并非所有无符号 32 位整数。

解释是一些位模式用于表示小数,例如 0.125 和 1.5,因此小于 232 个位模式可用于整数。

您选择的编程语言中的一个简单程序可以告诉您 1.648、2.75、2.125、10.999、9.351、0.625 中的哪一个可以用单精度精确表示:打印,到 26 个有效十进制数字(例如,格式为 @ 987654322@ 使用类似printf 的函数),1.648f 的值,...

当您在大多数编程语言的程序中键入浮点常量 1.648f 时,它会被转换为最接近 1648/1000 的单精度浮点数。如果这个数字打印为1.64800000,这意味着数字 1.648 可以精确地表示为一个浮点数。如果它打印为其他内容,则 1.648 不可表示(并且输出会告诉您最近的浮点数恰好有多远)。

【讨论】:

  • 那么这是否意味着对于第三个问题,只有 2.125 可以用 32 位浮点值精确表示?
  • @JamesGrabowski 我很惊讶你发现了这一点。当您打印具有足够有效数字的其他数字的相应值时,您的编程语言会显示什么?不要忘记 f 后缀或编程语言中的等效符号来指示单精度浮点数!
  • 当我创建所有这些值的浮点数并将它们打印出来时,它们似乎都可以工作。
  • @JamesGrabowski 我很困惑。您需要打印到超过 9 个十进制数字才能看到仅尾随零或非零数字。你是对的,0.625、2.125 和 2.75 是答案。可以用二进制浮点数表示的小数总是以 5 结尾,但反之则不成立(例如 0.05 不能用二进制浮点数表示)。 ideone.com/IDWquE
  • 基本测试是数字是否可以表示为分母是2的幂的分数。例如,2.75 是 11/4,4 是 2 的幂。未能通过该测试的数字不能精确地表示为浮点数。通过但需要太大分子或分母的数字也无法表示。
猜你喜欢
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2011-12-14
  • 2022-11-15
相关资源
最近更新 更多