根据你需要在内存中保存的数据决定的。
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于做网站、网站建设、湟中网络推广、成都小程序开发、湟中网络营销、湟中企业策划、湟中品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供湟中建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
简单来说,double常用于科学计算、对小数点后精度要求较高的场合;
float是32位,double是64位
float32位中,有1位符号位,8位指数位,23位尾数为
double64位中,1位符号位,11位指数位,52位尾数位
取值范围看指数部分
float是有符号型,其中,8位指数位,2^8=(-128—127),因此实际的范围是-2^128—2^127,约为-3.4E38—3.4E38
同理double范围约是-1.7E308—1.7E308,楼主可以自己按下计算器试试看,印象深些
精度是看尾数部分
float尾数位23位,2^23=8.3E6,7位,所以不同的编译器规定不同,有些是7位,有些8位
double尾数52位,2^52=4.5E15,15位,所以double的有效位数是15位
C语言中,单精度浮点型为float, 双精度浮点型为double。具体区别如下:
1、 占用字节空间不同。
一个float变量占用四字节,一个double类型变量,一般占用8字节。
2、 表示范围不同。
float表示范围为-3.4E-38~3.4E+38。
double 表示范围为-1.7E-308~1.7E+308。
3、 精度不同。
float在表示十进制时,有效数字为6到7位。
double在表示十进制时,有效数字为15到16位。
4、输入输出格式不同。
在C语言中,输入输出格式化字符串,float使用%f,而double使用%lf。
在C语言源码中,只能在浮点数后面加f来表示单精度浮点数。譬如如下代码:
float f = 1.1f;
或者
float f = 1.1F;
大小写都可以的。
16进制的浮点数编码,它不像整数编码那样直观,因为浮点数编码,在计算机中是以IEEE754格式进行编码编码的,每一个二进制位都有不同的意思,拿单精度浮点数来说,它的符号位占1位,指数位占8位,有效数字位占23位,而且,如果使用十六进制来传送,你还要确定计算机的内存,存储顺序。 相对很复杂的。
要了解更多浮点数编码的问题,可以自己找一下IEEE754编码格式详细的介绍。也许会帮到你!
单精度和双精度顾名思义是两种精度的不同划分,单精度float是保证7位有效数字,double是保证16位有效数字。
例:(float)(10%3)
结果是1.000000即七位有效数字,(后面不一定全是0,计算机可随机选择数字,所以整数1不等于float或double的1)
(double)(10%3)
同理结果是:1.XXXXXXXXXX……后面有十五位的有效数字
虽然整数位都是1,但由于有效位数不同,即后面随机派出的小数可能不同,所以二者理论上不同,实际比较不能用==,要用fabs()1e-6.
单精度是float
双精度是double
都是浮点型,所谓浮点就是只能表示近似值,不能表示准确值,最后的几位小数是不准确的。
如:
#includestdio.h
void main()
{
double a=2.9999999;
printf("%f ",a);
a=2.99999998;
printf("%f ",a);
a=2.99999997;
printf("%f ",a);
a=2.99999996;
printf("%f ",a);
a=2.99999995;
printf("%f ",a);
printf("%\n ");
//输出结果都是3.000000
a=2.9999949;
printf("%f ",a);
a=2.9999948;
printf("%f ",a);
a=2.9999947;
printf("%f ",a);
a=2.9999946;
printf("%f ",a);
//输出结果都是2.999995
}
单精度就是精度小点 范围小 小数点后面的位数少
双精度就是精度大点 范围大 小数点后面的位数多