2012-10-17 51 views
-1

我寫了一個小程序與分數的工作:加成分數:浮點異常

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) 

任何想法?有沒有更優雅的方式來做到這一點?

+3

也許你的初始分母應該是1?現在你的初始分數是0/0 ... 0/1會更有意義。 – FatalError

回答

5

看起來像你被零除。

0

你的初始化更改爲

sum->den = 1; 
+1

初始化分子和分母都會給出錯誤的總和。 – Raj

+0

對不起,沒有num.only書房 –

0

您是除以零

第一次ü調用函數中添加,參數一個既有其NUM書房等於零。 這會導致您在此表達式中稍後收到的異常。

int la = l/a.den; 

將b.den初始化爲1應該會阻止程序崩潰。 但恐怕不會產生正確的總和。