在C中添加分数:浮点异常

时间:2012-10-17 19:16:09

标签: c floating-point

我正在编写一个使用分数的小程序:

struct fraction
{
     int num;
     int den;
};

typedef struct fraction FRAC;

我使用最不常见的多重函数来添加两个分数(之后不再简化它们):

FRAC *add (FRAC a, FRAC b)
{
    int l = lcm(a.den, b.den);
    FRAC *sum;
    sum = malloc(sizeof(FRAC));
    sum->den = l;
    int la = l/a.den;
    int lb = l/b.den;
    sum->num = a.num*la + b.num*lb;
    return sum;
}

给定一个FRAC数组我想用以下函数计算总和:

FRAC* fraction_sum (FRAC *a, unsigned int size)
{
    int i;
    FRAC* sum = malloc(sizeof(FRAC));
    sum->num = 0;
    sum->den = 0;

    for (i = 0; i < size; i++)
    {
        FRAC b = {sum->num, sum->den};
        sum = add(b,a[i]);
    }

    return sum;
}

然而这个表达

print(*fraction_sum(fractions, N));

返回错误

Floating point exception (core dumped)

有什么想法吗?有更优雅的方式吗?

3 个答案:

答案 0 :(得分:5)

看起来你正在除以零。

答案 1 :(得分:0)

将您的初始化更改为

   sum->den = 1;

答案 2 :(得分:0)

除以零

第一次调用函数add时,参数 a num den 都等于零。 这会导致您在此表达式中稍后获得该异常。

int la = l/a.den;

将b.den初始化为1可以阻止程序崩溃。 但它可能不会产生我害怕的正确数额。