首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算e中的数据类型int和double

问计算e中的数据类型int和double
EN

Stack Overflow用户
提问于 2022-12-04 14:33:43
回答 2查看 36关注 0票数 -3

为什么,当我使用double i时,输出是e的(近似)值

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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的数据类型并不重要。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-12-04 14:40:21

当您对double或int变量使用i变量时,输出是不同的,原因在于C++中的除法工作方式。使用整数除法时,除法的结果也是整数。因此,在第二个示例中,i是一个int,每次执行除法1/i时,结果总是一个整数,然后将其转换为double并添加到s中。这意味着计算中的某些分数部分正在丢失。

在第一个例子中,i是double,除法1/i的结果也是double,计算的小数部分保留下来。这就是为什么在这两种情况下输出是不同的。

解决这一问题的一种方法是在部门中使用1.0而不是1,如下所示:

代码语言:javascript
复制
#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,因此计算的小数部分将被保留。

票数 -2
EN

Stack Overflow用户

发布于 2022-12-04 14:37:20

当i是整数时,您正在对这一行进行整数除法:

代码语言:javascript
复制
s=s+1/i;

您想要做浮点除法:

代码语言:javascript
复制
s = s + 1.0 / i;
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74677598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档