2014-06-20 40 views
-1

與朋友合作,我試圖調試爲什麼log10(1/4)返回-inf,而log10(0.25)返回-0.60206的正確答案。使用cmath時,爲什麼log10(1/4)不等於log10(0.25)?

我正在使用這個程序來測試它,並嘗試將值移動到變量。

#include <iostream> 
#include <cmath> 

using namespace std; 

int main() 
{ 
    double t = 1/4; 
    double r = 0.25; 
    cout << log10(t) << endl; 
    cout << log10(r) << endl; 

    return 0; 
} 

這回-inf-0.60206

爲什麼1/4的行爲與0.25不一樣?

+6

'1/4'是整數除法。 –

+1

'1/4'爲'0'。 '1.0/4.0'(或'1.0/4')是'0.25'。 – Amadan

+0

@ T.C。謝謝! >。<哈哈。 –

回答

2

1/4是整數除法,結果爲0,然後將其分配給t。直到已經計算出結果之後,纔會轉換爲double。要強制浮點除法並得到0.25,請使用1.0/4

如果您嘗試打印存儲在t而非log10(t)中的值,這將會非常明顯。

1

因爲1是int,和4是int,所以它是一樣的:

int one = 1; 
int four = 4; 
double x = one/four; // zero 

轉換從intdouble在結束時會發生,後除法已經發生。

1

在C++(以及大多數其他編程語言)中,整數除以整數除以整數。 1/4的結果被截斷產生0.

嘗試1.0/4而不是,因爲浮點除以整數總是浮點數。

相關問題