double 、float 和long int的区别

miangmiang咩 2011-11-15 07:47:33
我之前在网上已经查过了,但是没有我想要的答案,我的疑问是:
对于 double和float,双精度和单精度有什么区别?在表现在小数位上,还是处理最大数据的长度上呢?

对于double 和long int,同是处理32的的数据,又有什么区别呢?求都呀
...全文
2303 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2011-11-15
  • 打赏
  • 举报
回复
看下它们在32位编译器下取值范围,先了解下:
32-bit data types, sizes, and ranges

Type Size (bits) Range Sample applications
unsigned char 8 0 <= X <= 255 Small numbers and full PC character set
char 8 -128 <= X <= 127 Very small numbers and ASCII characters
short int 16 -32,768 <= X <= 32,767 Counting, small numbers, loop control
unsigned int 32 0 <= X <= 4,294,967,295 Large numbers and loops
int 32 -2,147,483,648 <= X <= 2,147,483,647 Counting, small numbers, loop control
unsigned long 32 0 <= X <= 4,294,967,295 Astronomical distances
enum 32 -2,147,483,648 <= X <= 2,147,483,647 Ordered sets of values
long 32 -2,147,483,648 <= X <= 2,147,483,647 Large numbers, populations
float 32 1.18*10^-38 < |X| < 3.40*10^38 Scientific (7-digit) precision)
double 64 2.23*10^-308 < |X| < 1.79*10^308 Scientific (15-digit precision)
long double 80 3.37*10^-4932 < |X| < 1.18*10^4932 Financial (18-digit precision)
AnYidan 2011-11-15
  • 打赏
  • 举报
回复
google IEEE754

男人女人都是人,有区别吗?
genio 2011-11-15
  • 打赏
  • 举报
回复
尽量不用float,over
xiaopoy 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 seucs 的回复:]

对于 double和float,双精度和单精度有什么区别?在表现在小数位上,还是处理最大数据的长度上呢?
答:区别就是float一般是32位,double一般是64位的。double数据的精度大,也就是有效位数多。楼主可以参看IEEE754 浮点数存储格式

对于double 和long int,同是处理32的的数据,又有什么区别呢?
答:暂且不比较它们的位数,从本质上说,一个是浮点数,……
[/Quote]

我最烦这种满口术语的。虽然你说的是很好,但什么什么IEEE754,你倒是看过没有啊,要知道就准确介绍下,不知就为不知,探讨学习充肆什么术语。

woshiwaiwai的回答非常棒,我顶!
xiaopoy 2011-11-15
  • 打赏
  • 举报
回复
在32位机和系统、程序上。
double和long int的长度都是 64bit,转换成字节就是需要8字节来表示一个这样的数据。
int和float都是32bit,也即4字节。

所以他们可以表示的精度不一样,即可表示出来的数字的位数不一样,这不是很理所当然的嘛?

float和double使用的是IEEE定义的一种特殊的储存方式,当一个float类型中在内存中储存的是0x10000000时候,不能认为它就是0x10000000.000这个数字,而是要按照数字里不同位解释成不同的意思,可以认为就是一个这样大小的结构,结构里面的全部元素组合起来表示出来一个带小数的数字。float是32bit的,double是64bit的,很理所当然嘛,double比float的精度高 :)

我复制以前做的笔记给你:

IEEE的浮点机制:类似于数字在科学计数法中的表述,IEEE浮点数字V的格式分成三个部分,分别是
S: M : e
这个格式被处理成数字V的计算过程为
(-1)*S * M*2^e

式子中(-1)*S的含义是,这个数字的最高bit乘以-1,就是其正负值。
M则是用来表示V的实际值的数字。
指数e在计算过程中是作为2的幂。它可以是负数,也可以是正数,分别用来表示小数点之后,或一个用倍数表示出来的很大的远远超过32bit可以表达出来的数字,


因此表述一个IEEE浮点数需要的长度要计算进全部的S位,E位,M位
常见的浮点数字的位数设置有,单精度浮点(float)和双精度浮点(double)
float中, s,e,m分别划分了 1,8,23 位,这是32位的数字
double中,s,e,m分别划分了1,11,52 位,这是64位的数字

可以把IEEE浮点表示出来的划分成3种类型的数字:
1.exp(E)位不是全0或全1:正常的浮点数格式,(-1)*S (绝对值):M*2^e式子中的, S表示正负位, M表示最终浮点数字的所有位,2^e中的e,就是E的值减去一个base值(32 位:127, 64 位:1027),这个base值是为了表达小数点后面的数字而设置的,相当于的32bits的浮点能表达小数点后127位的数字,64bits则是1027bits的。
2. exp(E)位全0的时候, 表述这是一个值为0的浮点数
3.exp(E)位全1的时候,表述这是无穷, 此时需要M的值为0,(否则就是一个NaN not a Num!),S控制它表示正无穷还负无穷.

浮点有一个特性是两个实数之间存在无数个浮点,因此比较二个实数是否相同的这种想法是错误的,应该比较浮点是否在符合目标大小条件的某2个实数之间。
woshiwaiwai 2011-11-15
  • 打赏
  • 举报
回复
float和double,因为后者在内存中占用内存比前者多,所以后者有更多的空间来保存尾数、指数,所以它的精度和取值范围相比前者提高了很多。
double和long,在我们的实际应用中,有些数据只有整数,而有些数据有整数有小数,光有整数我们就丢失了小数.而光有小数,表示大的整数的时候又不能全部表示出来。
seucs 2011-11-15
  • 打赏
  • 举报
回复
对于 double和float,双精度和单精度有什么区别?在表现在小数位上,还是处理最大数据的长度上呢?
答:区别就是float一般是32位,double一般是64位的。double数据的精度大,也就是有效位数多。楼主可以参看IEEE754 浮点数存储格式

对于double 和long int,同是处理32的的数据,又有什么区别呢?
答:暂且不比较它们的位数,从本质上说,一个是浮点数,一个是整数,整数的任何运算都是精确的(1+1就是2,永远不会是2.00000000000000001),但是浮点数运算会有精度问题,
比如,
double d = 0.0d;
float f = 0.0f;
if(d == f){ // 那么可能 d 永远也不会等于 f,
//do something // 即这里的语句永远也不会被执行到
}
ryfdizuo 2011-11-15
  • 打赏
  • 举报
回复
long int是32位。
long long 和double都是64位的。
Kaile 2011-11-15
  • 打赏
  • 举报
回复
double 和long int,同是处理32的的数据,又有什么区别呢?

double是浮点小数, long int是整数,区别太大了
duke56 2011-11-15
  • 打赏
  • 举报
回复
double和float是保存小数点数,也就是精度了...小数点越多你就可以处理的长度更大了

如:
3.14
3.1415962
两个数...3.14已经被四舍五入了后边的就不能处理了,第二个还可以处理...它后边的长度

double 和long int区别在于一个是以指数形式保存,可以保存小数,而long int只能保存整数,不能保存小数点

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧