1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C语言整数怎么转化为浮点数 C语言浮点数和整数转换的分析

C语言整数怎么转化为浮点数 C语言浮点数和整数转换的分析

时间:2020-06-19 20:23:07

相关推荐

C语言整数怎么转化为浮点数 C语言浮点数和整数转换的分析

这里以C语言的浮点数为例,在IEEE浮点标准下,整数转换为浮点数的过程做一些直观的分析和具体的实现,IEEE浮点数的标准细节详见()。

在C语言中,使用float和double类型数据分别对应单精度和双精度的浮点格式。以float为例,由于float是32位,int在32位机器上也是32位。因此,float必然不能对所有的int进行准确的表示。实际上,在数轴上,浮点数所能表示的数呈非均匀的分布。举例如下图。

..-3....-2...-1..........0.........1.....2...3..

图中的点代表float可表示的数,可以看出,在所能表示的数中,接近0的比较密集,远离0的则步长逐渐增大。具体的步长可以根据浮点数标准算出。

以float为例,符号位1位,阶码8位,位数23位。由IEEE浮点的标准可知,非规格化数表示那些非常接近0.0的数。这时候,阶码域全为0.因此,非规格化数的步长为

2-23×2-127≈1.4×10-45

而非规格化数的范围则约等于-1.2×10-38到1.2×10-38在这个范围内,float能表示的数呈均匀分布。

而int则处在规格化数的范围内。对于规格化数,步长不均匀。步长可表示为

2-23×2E

其中,E的取值范围是-126~+127。显然,随着E增大,步长增大。因此,对于越远离0的区域,步长越大。当E=30时,步长为128。如下程序是一个验证。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。