這是我的第一個C作業,所以我的錯誤可能對你來說真的很明顯,如果這是我的錯誤案件。然而,這對我來說似乎很不尋常(不僅僅是工作,而且還有一些奇怪的輸出),所以我想我應該問問周圍。我試圖計算交替諧波系列的總和。這是應該做的功能(它返回一個雙精度)。循環結束提前,爲循環計數器產生負值(當i = 1; ++ i)
double series(void){
double sum = 0.0;
int i,x;
for (i = 1; i > 0 ; i = i+1)
{
if (sum - (sum - 1.0/x) == 0 || sum - (sum + 1.0/x) == 0)
{
printf("To infinity and beyond... almost!\n");
return sum;
}
else if (i % 2 != 0)
{
sum = sum - 1.0/x;
}
else if (i % 2 == 0)
{
sum = sum + 1.0/x;
}
else
{
printf("How did I end up here?\n");
}
}
printf("I ESCAPED THE LOOP\n");
return 1.0*i;
}
當我運行程序時,它總是在最後幾行結束了(打印我躲過了LOOP行,所以for循環結束,而它應該直到運行如果滿足條件,則首先不想達到最後一行)。輸出 - 函數的返回值 - 對於i是-21473822648.000000。一個負數(實際上main中的輸出是正數,但是在那裏乘以負數-1,除去-1.0只不過是將符號改變爲不應該是的符號),當唯一改變的東西應該是在for循環介紹中爲i = 1和++ i。這是如何發生的? main所做的唯一事情就是調用函數,將double的值設置爲函數返回值的負數並打印該值。
我剛剛意識到if()語句中的操作順序可能是錯誤的,但我在其他所有內容的附加括號中修正了它。它沒有效果。
哦,這實際上不是全部問題,我實際上應該找出哪些是最佳和最差的求和命令。我只是想看看我是否可以編寫一個能夠做到的程序。任何鏈接到浮點運算相關的材料等將不勝感激。
在此先感謝任何人的建議。
我會建議分配x – Nico
x未初始化? –
是的。是的,我只是意識到它應該是雙倍的。我把它改爲int i;雙x;在循環之前,x = 1.0 * i;在第一行的循環內部(在if-else if-chain之前)。然而,循環仍然以某種方式結束並給了我相同的結果。 – user1796924