2014-06-20 43 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而不是,因为浮点除以整数总是浮点数。

相关问题