C中的浮点算法

时间:2010-07-07 21:50:43

标签: math floating-point fixed-point

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

我可以猜到它,但有点不清楚。我知道通过将4字节整数除以信号标志,基数和尾数可以得到一个固定点。有了这个,我们有一个1位标志,一个5位基数和一个10位尾数。 32位字是浮点值的理想选择:)

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

我看到的所有解释都使用了公式,乘法等等,而且我认为它们看起来很复杂,会更简单一些。我需要一个更多针对初级程序员的解释,而不是数学家。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

运行,不要走路,以获得Knuth的Seminumerical Algorithms,其中包含执行多精度和浮点运算的精彩直觉和算法。

答案 2 :(得分: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标准中那样,但它没有表示,尽管它用于操作

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