簡體   English   中英

C中的分數加法:浮點異常

[英]Addition of fractions in C: Floating point exception

我正在編寫一個處理分數的小程序:

struct fraction
{
     int num;
     int den;
};

typedef struct fraction FRAC;

我使用一個最不常用的多重函數添加兩個分數(此后不進行simpilfying):

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)

有任何想法嗎? 有沒有更優雅的方法可以做到這一點?

看起來您正在被零除。

將初始化更改為

   sum->den = 1;

您正在除以零

u首次調用函數add時,參數anumden都等於零。 這將導致您稍后在此表達式中得到該異常。

int la = l/a.den;

將b.den初始化為1應該可以防止程序崩潰。 但恐怕它可能無法產生正確的金額。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM