C++中float和double的区别

下面是代码:
#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;
}

两者区别主要在分配存储空间和描述浮点数所拥有的有效数字位数。通常情况下:
1,大多数情况下,编译器为float分配4字节,而为double则分配8字节。
2,float可提供6位有效数字,而double则可以提供15位有效数字。
所以在应用是需要注意定义数据的精度要求。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-04
是这样的, 你程序里的小数, 比如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型计算得到的结果值.

由于这一点细微的差别,对于某些极特殊的值可能结果略有不同.
第2个回答  推荐于2017-09-10
你应该是用VC6编译的吧?我用g++ 4.6.3编译,无警告,结果正确。
VC6编译出警告是因为,VC6的编译器默认把小数当作const double类型,8个字节,而float是4个字节,当然会出警告。想要不出警告,1是改数组类型,2是在每个数字后面加一个“f”,告诉编译器把这个数字当作float类型处理本回答被提问者采纳
第3个回答  2013-01-04
不用改成double,你的代码我在linux下编译运行过,可以正常工作。不知道你遇到的是什么问题

float一般占用4个字节,double占用8个字节。追问

是可以正常运行,但是会报warning,编译器自动把float用double替代了

第4个回答  2013-01-04
因为浮点常量如3.1;3.1f是double类型
不换也是可以,换了不会警告了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网