2013-03-10 42 views
1

這是我的計劃:C++程序1.4.3錯誤數

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

double areaofcircle(double r) 
{ 
return 3.14 * r * r; 
} 

int main() 
{ 
cout << areaofcircle(5); 
} 

我應該得到的「78.5」的輸出,但我不斷收到「78.512」。到底是怎麼回事?! 我也試過浮動,但我仍然得到相同的輸出。

也只是一個側面的問題,我真的需要添加「返回0;」到主要功能?

還有一個問題,我是否需要寫「using namespace std;」在每個功能裏面,或者我可以把它寫在一切之外,就像我一直在做的一樣。

+0

可能的重複http://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples – Aiias 2013-03-10 23:56:56

+0

http://stackoverflow.com/questions/554063/how-do-i-print-a-double-使用全精度使用cout的值 – 2013-03-10 23:57:11

+0

嘗試將'3.14'更改爲'3.14d' – Patashu 2013-03-10 23:57:46

回答

1

你傳遞的字面整數(5),因此地方的隱式轉換,需要把它變成一個雙。通過5.0你會更好。 C++的默認雙打不需要說明符,所以你的3.14很好。 (指定一個浮點數需要3.14f)。也就是說,我用5和5.0都試過,並且在我的編譯器上都得到了78.5次。

你如何使用std名稱空間是好的,但正如它指出的那樣,它確實將所有標準名稱空間都納入了範圍。我在教材中看到很多。最好只使用 using std::cout;

或者只是明確地將std :: cout添加到所有用途。然而,從編輯的角度來看,你做到這一點並沒有什麼「錯誤」。

1

我認爲你做錯了什麼。我在GCC編譯器上試了一下,我得到了78.5。你正在使用哪種編譯器?

關於你提到的其他問題

  1. 它始終是從主返回程序的狀態是個好主意。通常,如果一切正常,您可以返回EXIT_SUCCESS,否則您可以返回EXIT_FAILURE。

  2. 不,它沒有必要包括使用命名空間標準。相反,污染你的標準命名空間是不好的做法。您應該只包含您經常使用的功能。

要了解關於C++的更多信息。檢查這link

希望這可以幫助。

1

在VS 2008上嘗試了幾次實驗,看看能否得到類似的錯誤。通過將pi更改爲浮點數,我得到的78.500002622604370與您的問題不同,但不一樣。但是當pi是雙倍時,我確實得到了78.5。

我建議你讓我們知道你正在使用哪個編譯器和版本,然後可能有人可以提供幫助。

#include "stdafx.h" 
#include <iostream> 
const double pi = 3.14; 


double areaofcircle(double r) 
{ 
    return pi * r * r; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    double temp = areaofcircle(5); 
    std::cout << temp; 
    return 0; 
}