与朋友合作,我试图调试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/4
与0.25
的行为不一样?
答案 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
从int
到double
的转换最后发生在分割后。
答案 2 :(得分:1)
在C ++(和大多数其他编程语言)中,整数除以整数总是一个整数。 1/4
的结果被截断以产生0。
请尝试使用1.0 / 4
,因为浮点数除以整数后总是浮点数。