【问题标题】:Advantages and disadvantages of floating point and fixed point representations [closed]浮点和定点表示的优缺点[关闭]
【发布时间】:2012-03-10 13:02:07
【问题描述】:

过去三天我一直在尝试了解浮点表示和定点表示之间的确切区别。我对阅读材料感到困惑,我无法决定什么是对的,什么是错的。

其中一个问题是“精度”、“尾数”、“非规范化”、“下溢”等少数技术术语的含义。

谁能举例说明区别?

到现在为止我能够查到的(并且能够清楚地理解)的要点如下:-

浮点数 -
1. 优势提供了非常大的范围
2. 缺点四舍五入

固定点 -
1. 优势数字表示准确(在涉及“金钱”时使用)
2. 缺点提供的范围非常有限

但我知道还有很多不同之处(主要是优点和缺点)。任何人都可以列出它们并进行解释吗?

【问题讨论】:

  • Wikipedia 至少应该为您提供术语基础,但如果您愿意花一些时间研究该主题,David Goldberg 的论文应该让您对概念、限制、和浮点运算的微妙之处。你不需要理解每一个证明,但如果你认真对待你提到的 C/C++(或任何?)编程,那么这些东西是至关重要的。
  • @Hale 感谢您的帮助 :) 基本上,当我偶然发现 Oracle SQL 中的数据类型时,我开始探索这个主题。我也在我的大学里学习编程语言的原理。
  • 数字不精确地以定点表示。我不知道是什么让你产生了这种想法。您可能认为货币金额更好,因为由于您必须自己实现定点,您可以执行十进制定点,但轴二进制/十进制和定点/浮点是正交。

标签: floating-point fixed-point


【解决方案1】:

浮点背后的技术需要很长时间才能习惯。此处不再赘述。

简单地说,浮点数实现了高域(从接近零的非常小的数字到非常高的数字,有时甚至高于宇宙中的原子数)。浮点数通过保持 relative 误差恒定来实现这一点。 IE。该数字将在固定的小数位数后开始四舍五入(这是一种简化,但有助于理解原理)。这与大多数自然科学中的“重要数字”概念非常相似。然而,这意味着浮点数总是以某种方式四舍五入。如果您将一个非常小的数字添加到一个非常大的数字中,那么小数字将被截断,而大数字将保留。当小数字低于阈值时会发生这种情况。如果您添加许多数字,有时可能需要先对它们进行排序,然后在大数字之前添加小数字。还需要考虑数值稳定性的概念,即算法如何因舍入而偏离正确结果。

另一方面,固定点表示将始终具有相同的绝对错误。如果您存储具有 4 个小数位的货币,您就知道您的数据最多会偏离 0.00005 美分。但是,如果您添加数据,则此错误可能会再次累积,但此规则与浮点规则有很大不同。

除非您从事繁重的数字工作,否则这些问题可能不应该考虑。大多数情况下,浮点数和定点数都可以正常工作,只要小心谨慎(即永远不要在浮点数或定点数上使用==。但是,比较它们的正确方法对两者都不同)。此外,AFAIK 浮点数更常用于科学工作,因为大多数情况下,科学家将接受数字培训,知道如何处理舍入,并且只对相对精确的结果感兴趣。定点用于财务,每个四舍五入都必须记入并存储在某个地方(通常银行只会保留四舍五入的半微分),因此您必须很好地控制绝对误差,以便以后能够解释它。

【讨论】:

  • 我至少在某种程度上了解技术细节(表示)。感谢您的非常简单的解释:)您能告诉我恒定阶相对误差和恒定阶绝对误差之间的区别
  • “除非你在做繁重的数字工作”——我完全不同意这个说法。由于“灾难性取消”而导致结果崩溃的百万分之一的案例,不能轻易重播和调试。或者隐藏在不透明/复杂代码库中的草率数值方法。更好地量化浮点错误的任何来源并正确处理它,就像程序中的任何其他“异常”条件一样。
  • @BrettHale:好的,我想我应该对这样的声明更加小心。我平时的工作真的不包含太多的浮点运算,所以我对它不是很有经验(至少没有比我在课堂上学到的更多)。我认为我应该更加小心这样的陈述。
【解决方案2】:

浮点数适用于浮点点,即当您需要表达不同比例的数字时。你牺牲精度来获得规模范围。

另一方面,定点数仅适用于固定比例(如果缩放过多,它们会超出或不足),但只要保持在所需的比例范围内,您就会获得精度。

简而言之:如果您乘以很多但不添加不同比例的数字,请使用浮点数。如果添加很多但不相乘,请使用定点。

(定点用例的一个很好的例子是与货币有关的任何事物:本质上,您可以将单位固定为美分或百分之一美分,并让所有货币值都是该单位中的整数。 )

【讨论】:

  • 嗨 kerrek :) 你能准确地告诉我“精确”是什么意思吗?我明白英文的意思。但是在例如 Oracle SQL 中,我们定义了一个 number(precision,scale) ,其中precision 表示“位数”的总数。它只是令人困惑!
  • 浮点 优点:精度高 缺点:面积和功率昂贵(计算密集型) 定点 优点:面积和功率效率 缺点:动态范围和精度
  • @Appy:精度是指信息量。例如,如果您测量某物的长度,您可以说它是 1m 长、1.2m 或 1.2041m。所有这些在某种程度上都是“正确的”,但测量值在提高精度 - 即它们包含更多有效数字的信息(以需要更多存储空间和更精细仪器为代价)。此外,重要的是要理解更高的精度并不意味着更高的精度:如果对象真的长 1.2100m,那么 1.2m 在其精度上是准确的,但 1.2041m 在精度上并不准确。
  • 这是我在 pdf 文档上看到的。这是链接 - ee.ucla.edu/~ingrid/Courses/ee201aS02/lectures/…
  • 精确度是指给定的信息量。 IE。有多少个数字。如果您有 n 个数字,则可以从中测量精度。后面有 n 个数字的数字。表明它可以在这个细节级别上正确测量。 IE。对于 1.2,它告诉您它可以测量到小数点后一位的数字。它没有告诉你任何关于下一个小数的信息,所以它给你的承诺是正确的。数字 1.2041 告诉您,它最多可以测量四位小数,但在小数点后第二位是错误的。 IE。它有更高的精度,但它是错误的。
【解决方案3】:

定点数可以按线性时间排序。定点也是 明确的;在特定的定点协议中可以表示的每个数值只有一种表示形式,而浮点则不是这样。

浮点具有更广泛的可表示范围。这也是模棱两可的。浮点数可以在 NlogN 时间内排序。

【讨论】:

  • 嗨伊恩,我对你的回答有几个问题:a) 你说排序定点数可以在 O(N) 时间内排序,浮点数在O(N log N)。你能解释一下吗?我不明白为什么会这样。 b) 浮点数不明确是什么意思? ——— 再想一想,我看不出为什么在排序定点数和浮点数的时间复杂度上应该有任何差异。你能解释一下吗?
  • 浮点数可以像整数一样进行排序。它们是故意这样设计的。
【解决方案4】:

定点是整数格式的浮点数表示。所以可以像对整数一样对数字应用运算。 使用它的优点是浮点运算成本更高(处理能力)。较新的处理器有专门的 FPU(浮点单元)来处理它。

所以定点算法是在处理能力有限的情况下,一点点精度损失不会造成严重破坏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2012-03-20
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多