使用cmath时,为什么log10(1/4)不等于log10(0.25)?

时间:2014-06-20 01:53:08

标签: c++

与朋友合作,我试图调试log10(1/4)返回-inf的原因,而log10(0.25)则返回-0.60206的正确答案。

我正在使用这个程序来测试它,并尝试将值移动到变量。

#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/40.25的行为不一样?

3 个答案:

答案 0 :(得分:2)

1/4是整数除法,结果为0,然后将其赋值给t。转换为double直到计算完结果之后才会发生转换。要强制浮点除法得到0.25,请使用1.0/4

如果您尝试打印t而非log10(t)中存储的值,这将是相当明显的。

答案 1 :(得分:1)

因为1是int,而4是int,所以它与:{/ p>相同

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

intdouble的转换最后发生在分割后。

答案 2 :(得分:1)

在C ++(和大多数其他编程语言)中,整数除以整数总是一个整数。 1/4的结果被截断以产生0。

请尝试使用1.0 / 4,因为浮点数除以整数后总是浮点数。