2017-07-07 66 views
2

我做了一個計算球體體積的程序。
因此,當我在我的程序中試用這個公式「(4/3)* 3.14 * pow(radius,3)」時,它返回的值非常不準確。然後我試圖輸出的「4/3」返回的值,它只是在情況下,如果它是重要的返回值1計算球體積的程序中的奇怪錯誤

值: - 編譯:MinGW64 - IDE:VS代碼 - OS:贏10 64位

這是我的代碼:

#include<iostream> 
#include<math.h> 

using namespace std; 

int main(){ 
    float radius, v; 
    cout<<"Enter value of radius";cin>>radius; 
    v = (4/3)*3.14*pow(radius, 3); 
    cout<<"volume of sphere: "<<v<<endl; 
    system("pause");return 0; 
} 
+4

4/3產生一個整數,而不是浮點數。 –

+0

我以爲有很多重複的東西,但沒有找到好的東西... – Walter

+1

順便說一句,如果你關心效率,你應該避免使用'pow()'作爲小整數,尤其是如果它們是在編譯時已知。計算3球體積的最有效方法是「4.188790204786391 * r * r * r」,這只是3次乘法。 – Walter

回答

1

表達4/3執行整數除法,並且將導致1(它導致任何小數的截斷)。你應該執行浮點數分區。

v = (4.0/3.0)*3.14*pow(radius, 3); 
4

答案是1,因爲,4和3是整數,並且在C++整數由整數分割產生另一個整數,所以4/3 = 1

但是糾正,所有需要do是這樣的, 將整數更改爲浮點十進制數,例如4可以寫成4.0代替。

(4.0/3)*3.14*pow(radius,3) 

這就是所有,你很好去。