2013-05-03 42 views
0

我在我的C代碼中有一個連續的循環,我無法弄清楚它爲什麼這樣做。我覺得我錯過了一些在這裏顯而易見的東西,但由於某種原因我無法看到它。這裏是導致循環的代碼段:我有一個連續的循環,我無法弄清楚它有什麼問題

while (err > 0.0000001) { 
    if (err != 1.0) { 
     bab = ((2.0*bab) + input/(pow(bab, 2)))/3.0; 
     printf("The approximate cube root is %.3lf\n", bab); 
     err = input - bab; 
    } 
    else { 
     bab = ((2.0*app) + input/(pow(app, 2)))/3.0; 
     printf("The approximate cube root is %.3lf\n", bab); 
     err = input - bab; 
    } 
} 

任何幫助表示讚賞。

+0

你期望什麼輸入值或值會導致循環退出? – 2013-05-03 00:57:06

+7

'if(err!= 1.0)' - 從不測試與浮點數的相等性。 – 2013-05-03 00:57:08

+1

閱讀關於浮點數的內容,以補充@JonathonReinhart正在談論的內容:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – 2013-05-03 00:58:26

回答

3

bab是(遲早)大約立方根input。您可以設置

err = input - bab; 

和測試

while (err > 0.0000001) 

所以,如果input > 1 + 3*1e-7(大致),差異input - cube_root(input)比你的閾值。

你可能想設置

err = abs(input - bab*bab*bab); 

到近似的質量控制的input立方根。

+0

+ 1.我知道程序中使用的數學有問題,但是在數學上我很悲慘! – 2013-05-03 01:10:22

+0

我想用這個數學來展示它如何等同於使用pow函數,所以略有不準確顯示它們不相等,但是謝謝你的好主意 – Student 2013-05-03 01:32:46

相關問題