【问题标题】:Minimum / Maximum numbers that can be represented in floating point可以用浮点数表示的最小/最大数字
【发布时间】:2019-04-30 17:14:08
【问题描述】:

如何计算可以用二进制 16、32、64 IEEE 754 浮点数表示的最小/最大十进制数?

【问题讨论】:

  • 使用特定的编程语言?还是一般?
  • 一般来说,我只是用伪代码编写一个简单的算法,允许用户输入一个定点数(正数或负数),并根据输入的数字确定是否数字可以用二进制16、32或64浮点表示。
  • 请记住,仅仅因为定点值在一个范围内,并不意味着它可以被表示。 FP 值在任何范围内“跳过”。
  • @LeventErkok:而且,如果他们允许在转换期间进行舍入,则转换为有限值的最大输入数与最大可表示值不同。
  • @EricPostpischil 非常正确,舍入模式增加了另一层复杂性。

标签: floating-point precision


【解决方案1】:

正常范围是:

  • 16 位(半精度):±6.10e-5 至 ±65504.0
  • 32 位(单精度):±1.18e−38 至 ±3.4e38
  • 64 位(双精度):±2.23e−308 至 ±1.80e308

如果您也允许 DENORMALS,则最小值为:

  • 16 位:±5.96e-8
  • 32 位:±1e-45
  • 64 位:±5e-324

请始终牢记,仅仅因为数字在此范围内并不意味着它可以被精确表示。在任何范围内,由于基数原因,浮点数必然会跳过值。经典的例子是1/3,它没有任何有限精度的精确表示。一般来说,您只能精确地表示那些称为“二元”的数字,即对于某些 A 和 B 的形式为 A/2^B 的数字;只要结果落入动态范围内。

【讨论】:

  • 资格:1/3 在有限的二进制或十进制格式中没有精确表示。
  • 编写解析器的人可能需要精确的界限,这样他们才能正确地接受或拒绝输入。
猜你喜欢
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多