黑马程序员技术交流社区
标题:
关于double和float的问题,求来个基础好的解答一下
[打印本页]
作者:
jingkai
时间:
2015-5-16 09:20
标题:
关于double和float的问题,求来个基础好的解答一下
C语言中表示小数的变量有double和float两种类型
其中double8个字节
float4个字节
那么这两者的区别是在精度上的区别还是在范围上的区别
还有就是这两种小数在内存中是怎么存的。求基础好的人解答一下
作者:
wodeheimalife
时间:
2015-5-16 09:43
范围和精度都有区别啊,虽然打印出来都是默认输出6位小数
作者:
15578797612
时间:
2015-5-16 14:30
都有区别,我觉得主要还是在精度上
作者:
wr6524798
时间:
2015-5-16 22:12
楼主,都有区别的,精度上和范围上区别
作者:
yjadair
时间:
2015-5-16 23:18
俩者在俩个方面都有区别 float精确到小数点6-7位;而double精确到小数点15-16位;double的范围比float大得多
作者:
wangguanyang
时间:
2015-5-17 08:18
双精度浮点的精确度要高很多
作者:
卖报的小画家
时间:
2015-5-17 15:12
你问的这个问题涉及到了数的定点和浮点表示方法,这是属于微机原理的内容了,大概给说一下,希望你能看懂,不懂的话就看看微机原理知识。
在计算机中,数有两种表示方法,即定点表示法和浮点表示法。它们的区别是:定点表示法中,小数点位置固定不变;浮点表示法中:小数点是浮动的。
通常,对于任意一个二进制数总可以表示为一个纯整数(或纯小数)和一个2的整数次幂的乘积形式N=2^P*S。 其中,S称为数N的尾数,P称为数N的阶码,2称为阶码的底。此处P、S都是用二进制表示的数。尾数S表示了数N的全部有效数字,阶码P指明了小数点的位置。
1、定点表示法
当阶码为固定值时,这样的数,称为定点数。一般来说,小数点位置固定在哪个位置上并无限制,但为了简便起见,在计算机中有两种定点数是最常用的。
(1)定点纯整数:当P=0,且尾数S为纯整数时,只能表示纯整数,称为定点纯整数。其格式为:
符号位 尾数S(小数点).
此时,把小数点固定在最低数值位右边,最高位为符号位,小数点本身不占位。
(2)定点纯小数:当P=0,且尾数S为纯小数时,只能表示纯小数,称为定点纯小数。其格式为:
符号位 .(小数点)尾数S
此时,把小数点固定在最高数值位左边,在小数点左边设有一位符号位,小数点本身不占位。
例如,8为二进制数11010100,若是定点纯整数,则其大小为-84;若是定点纯小数,则其大小为-0.65625。
从上例看出,定点纯整数和定点纯小数在格式上毫无差别,这是因为定点数的小数点是隐含的,小数点的位置是由程序员预先设定好的。由于定点数是将小数点的位置固定,这种方法所表示的数范围小,精度低,所以就有了现在的浮点表示法。
2、浮点表示法
如果阶码P不为0,且可在一定的范围内取值,这样表示的数称为浮点数。(为了在位数有限的前提下,尽量扩大数的表示范围,同时又保持数的有效精度,计算机往往采用浮点数表示数值。浮点数是用指数和尾数来表示实数的,由于指数可以选择不同的编码方式,尾数的格式和小数点的位置也可以有不同的约定,因此浮点数的表示方法不是唯一的。目前很多计算机厂家采用的是IEEE标准,IEEE浮点数格式分单精度和双精度两种,单精度为32位,双精度为64位。)
单精度数的指数E用8位表示,偏移量为+127,尾数包括符号位24位,其二进制编码格式为:
S E1E2......E8 b1b2b3......b23
双精度的指数E用11位表示,偏移量为+1023,尾数包括符号位共53位,其二进制编码格式为:
S E1E2......E11 b1b2b3......b52
举个例子:
将219.125表示成单精度浮点数?
步骤1:将十进制数化为二进制数:
219.125=11011011.001B
步骤2:将二进制数化为规格化形式:
11011011.001B=1.1011011001*2^7
指数为7,故E=7+127=134=10000110B
步骤3:写出二进制表示的规格化的浮点数形式:
0 1000 0110 1011 0110 0100 0000 0000 000
(这个就是单精度数219.125在内存中的存储形式,共4占个字节,32位)
作者:
x331275955
时间:
2015-5-17 15:14
来看看,学习了。。
作者:
gamyc
时间:
2015-5-18 12:07
7楼的讲得很细致啊
作者:
李闯
时间:
2015-5-18 21:53
%f打印出来后,flioat类型精度小数点后6位这跟double一样,但是有效数字float是7位,double是15位(有效数字包括小数点之前的数字)
作者:
天是蓝色的
时间:
2015-5-18 22:07
,精度都是小数点后6位,float有效数字位7,double有效数字位15
作者:
这是829
时间:
2015-5-18 22:11
在精度和范围上都有区别,double的有效值为15位,float的有效值为7位。我也是新手 不知道说的对不对啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2