gpt4 book ai didi

c++ - 关于C++中float数据类型声明的困惑

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:59 33 4
gpt4 key购买 nike

这里完全是新手。对于我的学校作业,我被要求编写一个程序来显示 -

s= 1 + 1/2 + 1/3 + 1/4 ..... + 1/n

这是我做的-

#include<iostream.h>
#include<conio.h>

void main()
{
clrscr();
int a;
float s=0, n;
cin>>a;
for(n=1;n<=a;n++)
{
s+=1/n;
}
cout<<s;
getch();
}

它完美地显示了它应该显示的内容。但是,过去我只编写过使用 int 数据类型的程序。据我了解,int 数据类型不包含任何小数位,而 float 则包含。所以我对 float 还不太了解。那天晚上晚些时候,我在 YouTube 上观看了一些视频,其中他正在编写完全相同的程序,但方式略有不同。视频是外语的,所以我看不懂。他所做的被声明为整数“n”。

int a, n;
float s=0;

代替

int a
float s=0, n;

但这并没有显示出预期的结果。所以他继续展示了两种纠正方法。他在 for 循环体中进行了更改 -

s+=1.0f/n;

s+=1/(float)n;

据我了解,他稍后在程序中将“n”声明为 float 据类型(我说得对吗?)。所以,我的问题是,两者都显示相同的结果,但两者之间有什么区别吗?当我们声明'n'是一个 float 时,为什么他写了 1.0f 而不是 n.f 或 f.n。我试过了,但它给出了错误。而在第二种方法中,为什么我们不能写 1(float)/n 而不是 1/(float)n?与第一种方法一样,我们添加了带有 1 的 float 后缀。另外,1.f 和 1.0f 之间有区别吗?

我试图用谷歌搜索我的问题,但找不到任何答案。此外,几个小时后我想到的另一个困惑是——为什么我们还要声明“n” float ?根据程序,总和应该是一个实数。所以,我们不应该只声明's'一个 float 。我越想我的大脑就越困惑。请帮忙!

谢谢。

最佳答案

原因是整数除法与浮点除法的行为不同。

4/3 给出整数 110/3 给出整数 3

但是,4.0f/3 给你 float 1.3333...10.0f/3 给你 float 3.3333...

如果你有:

float f = 4 / 3;

4/3 将为您提供整数 1,然后将其作为 1.0f< 存储到 float f

相反,您必须确保除数或被除数是 float :

float f = 4.0f / 3;
float f = 4 / 3.0f;

如果您有两个整数变量,那么您必须先将其中一个转换为 float :

int a = ..., b = ...;
float f = (float)a / b;
float f = a / (float)b;

第一个相当于:

float tmp = a;
float f = tmp / b;

关于c++ - 关于C++中float数据类型声明的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659640/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com