double和float的区别

来源:互联网 发布:matlab 字符串矩阵 编辑:程序博客网 时间:2024/06/03 15:46

在C和C++中,如下赋值语句

float a=0.1;
编译器报错:warning C4305: 'initializing' : truncation from 'const double ' to 'float '

原因:
在C/C++中(也不知道是不是就在VC++中这样),上述语句等号右边0.1,我们以为它是个float,
但是编译器却把它认为是个double,所以要报这个warning。

常人的做法,经常使用double,而不喜欢使用float,因为精度上的问题,我想也有上面这个没有道理的原因。

double和float的区别【转载网上的帖子】

2007-10-19 16:06

说实在的,以前还真没想过double和float到底有什么不同的地方,刚才看到了一个帖子,有写清楚了,地址:http://www.sunxin.org/bbs/printpage.asp?BoardID=4&ID=14057

内容如下:

============================================================

--  作者:一个踉跄
--  发布时间:2006-6-11 12:36:00

--  double和float除了精度上还有啥区别?

#include <iostream.h>
#include <math.h>

double distance(int X1,int Y1,int X2,int Y2){
return sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
}//int function

double distance(double X1,double Y1,double X2,double Y2){

//以上这句如果改为double distance(float X1,float Y1,float X2,float Y2){就会报错。。。
return sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
}//float function

void main(){
cout<<distance(2,2,5,5)<<endl;
cout<<distance(2.0,2.0,5.0,5.0)<<endl
}//main 结束

以上这段程序可以编译。。。

但是把其中某句的DOUBLE型改成FLOAT型倒数第二句就会报错。。。

为什么。。。只有精确到小数点后一位啊。。。float为啥不行呢。。。


--  作者:czq_czq
--  发布时间:2006-6-11 23:07:00

-- 

#include <iostream.h>
#include <math.h>

double distance(int X1,int Y1,int X2,int Y2){
return sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
}

float distance(float X1,float Y1,float X2,float Y2){


return (float)sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
}

void main(){
cout<<distance(2,2,5,5)<<endl;
cout<<distance(2.0f,2.0f,5.0f,5.0f)<<endl;
}

上面这样改一下就好了,,因为,5.0 默认是double类型的,,所以要加f ,