【问题标题】:Floating Point Algorithms in CC中的浮点算法
【发布时间】:2011-03-13 01:35:54
【问题描述】:

我最近在思考浮点数学是如何在计算机上运行的,我很难理解公式背后的所有技术细节。我需要了解加法、减法、乘法、除法和余数的基础知识。有了这些,我就可以制作三角函数和公式了。

我可以猜到一些东西,但它有点不清楚。我知道可以通过用信号标志、基数和尾数分隔一个 4 字节整数来确定一个固定点。有了这个,我们有一个 1 位标志、一个 5 位基数和一个 10 位尾数。一个 32 位的字非常适合浮点值 :)

要在两个浮点数之间进行加法,我可以简单地尝试添加两个尾数并将进位添加到 5 位基数?这是一种进行浮点数学(或定点数学,是真的)的方法还是我完全错了?

我看到的所有解释都使用公式、乘法等,对于我猜想它们看起来很复杂,会更简单一点。我需要一个更针对初学者而不是数学家的解释。

【问题讨论】:

  • 您为什么尝试编写新的浮点函数,而不是简单地使用标准数学库中的函数?
  • 我同意这是他应该做的。但是,想知道它是如何工作的肯定没有错。应该有更多这样的人。
  • @Daniel 因为他想学习?基本上,K&R 的“C 编程语言”中的所有练习都让您实现了常见的 unix 实用程序。
  • 我想了解微处理器的内部工作原理。我想成为一名工程师。我想把这些功能放在我想到的一个微型 VM 中。看到它在不使用专用硬件的情况下工作和计算东西会非常酷。

标签: math floating-point fixed-point


【解决方案1】:
【解决方案2】:

基数取决于表示形式,如果您使用基数 r=2,则永远无法更改它,该数字甚至没有任何数据可以告诉您哪个基数。我认为你错了,你的意思是指数。

要将两个浮点数相加,您必须通过旋转尾数使指数等于另一个。右一位表示指数+1,左一位表示指数-1,当你有相同指数的数字时,你可以将它们相加。

值(x) = 尾数 * 基数 ^ 指数

adding these two numbers

    101011 * 2 ^ 13
    001011 * 2 ^ 12

would be the same as adding:

    101011 * 2 ^ 13
    000101 * 2 ^ 13

使指数彼此相等后,您可以进行运算。 您还必须知道表示是否有隐含位,我的意思是,最高有效位必须是 1,所以通常,正如 iee 标准中已知的那样,但它没有被表示,尽管它用于操作.

我知道这可能有点令人困惑,而且我不是最好的老师,所以你有任何疑问,尽管问。

【讨论】:

  • 我的意思是指数。谢谢 :) 数学总是有点令人困惑,但对我来说是正确的。别担心,你是个好老师。 :)
  • 我似乎记得 Kahan 对前 IEEE 754 系统使用与格式对齐尾数相同的位数,以及此类系统具有的不良属性的长篇大论。如果你这样做,你肯定不会得到正确的四舍五入结果。我不记得是哪一篇了,但它是cs.berkeley.edu/~wkahan上的出版物之一
【解决方案3】:

跑步,不要走路,去获得 Knuth 的 Seminumerical Algorithms,它包含了执行多精度和浮点运算背后的奇妙直觉和算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    相关资源
    最近更新 更多