C++中float和double的区别
下面是代码:#include<iostream>usingnamespacestd;template<typenameG>Gmax(constG*r_array,ints...
下面是代码:
#include<iostream>
using namespace std;
template<typename G>G max(const G *r_array,int size) //模板,选数组最大值
{
G max_val=r_array[0];
int i;
for(i=1;i<size;i++)
{
if(max_val<r_array[i])
max_val=r_array[i];
}
return max_val;
}
float b[6]={1.1,2.1,3.1,4.1,5.1,50.1}; //这里为什么要换成double,和float有什么区别
int main()
{
float y=max(b,6); //float改成double
cout<<y<<endl;
return 0;
} 展开
#include<iostream>
using namespace std;
template<typename G>G max(const G *r_array,int size) //模板,选数组最大值
{
G max_val=r_array[0];
int i;
for(i=1;i<size;i++)
{
if(max_val<r_array[i])
max_val=r_array[i];
}
return max_val;
}
float b[6]={1.1,2.1,3.1,4.1,5.1,50.1}; //这里为什么要换成double,和float有什么区别
int main()
{
float y=max(b,6); //float改成double
cout<<y<<endl;
return 0;
} 展开
7个回答
展开全部
是这样的, 你程序里的小数, 比如float b[6]={1.1,2.1,3.1,4.1,5.1,50.1};这一句.
所有已知的小数常量, 编译器编译的时候, 都默认把它处理为double型的. 所以最好用double. 当然不是必须, 用float也行.
举个例,float a=7.3*1.0/3;
得到的结果为,将表达式右边按照double型数据计算得到的结果, 再转化成float型的值.
而并不是, 将表达式右边直接按float型计算得到的结果值.
由于这一点细微的差别,对于某些极特殊的值可能结果略有不同.
所有已知的小数常量, 编译器编译的时候, 都默认把它处理为double型的. 所以最好用double. 当然不是必须, 用float也行.
举个例,float a=7.3*1.0/3;
得到的结果为,将表达式右边按照double型数据计算得到的结果, 再转化成float型的值.
而并不是, 将表达式右边直接按float型计算得到的结果值.
由于这一点细微的差别,对于某些极特殊的值可能结果略有不同.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你应该是用VC6编译的吧?我用g++ 4.6.3编译,无警告,结果正确。
VC6编译出警告是因为,VC6的编译器默认把小数当作const double类型,8个字节,而float是4个字节,当然会出警告。想要不出警告,1是改数组类型,2是在每个数字后面加一个“f”,告诉编译器把这个数字当作float类型处理
VC6编译出警告是因为,VC6的编译器默认把小数当作const double类型,8个字节,而float是4个字节,当然会出警告。想要不出警告,1是改数组类型,2是在每个数字后面加一个“f”,告诉编译器把这个数字当作float类型处理
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用改成double,你的代码我在linux下编译运行过,可以正常工作。不知道你遇到的是什么问题
float一般占用4个字节,double占用8个字节。
float一般占用4个字节,double占用8个字节。
追问
是可以正常运行,但是会报warning,编译器自动把float用double替代了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为浮点常量如3.1;3.1f是double类型
不换也是可以,换了不会警告了。
不换也是可以,换了不会警告了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询