2010-07-07 46 views
4

我在想最近浮点数学如何在计算机上工作,并且很难理解公式背后的所有技术细节。我需要了解加法,减法,乘法,除法和余数的基础知识。有了这些,我将能够做出trig函数和公式。浮点算法在C

我可以猜出一些事情,但它有点不清楚。我知道一个固定点可以通过一个信号标志,一个基数和一个尾数来分隔一个4字节的整数。有了这个,我们有一个1位标志,一个5位基数和一个10位尾数。 32位字是完美的浮点值:)

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

我看到的所有解释都使用公式,乘法等等,它们看起来如此复杂以至于我猜想的东西会更简单一些。我需要一个解释更直接的开始程序员,而不是数学家。

+0

为什么你想*写*新的浮点功能,而不是简单地使用从标准数学库中的函数? – 2010-07-07 21:56:00

+6

我同意这是他应该*做的。然而,想要知道它是如何工作的,肯定没有错。应该有更多像这样的人。 – 2010-07-07 22:09:42

+5

@Daniel 因为他想学习?本质上,K&R的“The C Programming Language”中的所有练习都要实现常见的unix实用程序。 – Tyler 2010-07-07 22:11:17

回答

1

基数取决于表示形式,如果你使用基数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标准中它已知存在,但它没有被表示,虽然它用于操作。

我知道这可能有点混乱,我不是最好的老师,所以你有任何疑问,只是问。

+0

我的意思是指数。谢谢:)数学总是有点令人困惑,但它适合我。别担心,你是一位好老师。 :) – 2010-07-07 22:42:51

+0

我似乎记得Kahan有关使用格式对齐mantissas的相同位数的pre-IEEE 754系统的长篇谩骂,以及此类系统具有的不良属性。如果你这样做,你肯定不会得到正确的舍入结果。我不记得它是哪一个,但它是http://www.cs.berkeley.edu/~wkahan/上的出版物之一 – 2011-04-14 07:57:50

1

跑步,不要走路,以获得Knuth的Seminumerical Algorithms其中包含精妙的直觉和算法背后做多精度和浮点算术。