为什么,当我使用double i时,输出是e的(近似)值
#include <iostream>
using namespace std;
int main ()
{
double s=0;
double i=1;
for (int m=1;m<5;m++)
{
i=m*i;
s=s+1/i;
}
cout<<s+1;
return 0;
}但是当我使用int i时,输出是2:
#include <iostream>
using namespace std;
int main ()
{
double s=0;
int i=1;
for (int m=1;m<5;m++)
{
i=m*i;
s=s+1/i;
}
cout<<s+1;
return 0;
}存储e值的变量是s,它是double,所以我以为i的数据类型并不重要。
发布于 2022-12-04 14:40:21
当您对double或int变量使用i变量时,输出是不同的,原因在于C++中的除法工作方式。使用整数除法时,除法的结果也是整数。因此,在第二个示例中,i是一个int,每次执行除法1/i时,结果总是一个整数,然后将其转换为double并添加到s中。这意味着计算中的某些分数部分正在丢失。
在第一个例子中,i是double,除法1/i的结果也是double,计算的小数部分保留下来。这就是为什么在这两种情况下输出是不同的。
解决这一问题的一种方法是在部门中使用1.0而不是1,如下所示:
#include <iostream>
using namespace std;
int main ()
{
double s=0;
int i=1;
for (int m=1;m<5;m++)
{
i=m*i;
s=s+1.0/i;
}
cout<<s+1;
return 0;
}这样,1.0将被视为一个double,并且除法的结果也将是一个double,因此计算的小数部分将被保留。
发布于 2022-12-04 14:37:20
当i是整数时,您正在对这一行进行整数除法:
s=s+1/i;您想要做浮点除法:
s = s + 1.0 / i;https://stackoverflow.com/questions/74677598
复制相似问题