概述
C语言中有float 和double 两种不同的 浮点类型,分别对应 IEEE(电气电子工程师学会)754单精度格式和双精度格式,相应的十进制有效数字分别为 7 位和 17位左右。
在 各种数据相互转化时,满足:
1、 当int转化为 float 时不会发生溢出,但有效数字可能被舍去(int 的32位都用来表示数,但是float 只用了24位来表示尾数);
2、 int 或float 转化为 double 时,因为double 的有效位数更多,故能保留到精确值。
3、 从double 转化为 float 时因为 float的 范围更小,故可能发生溢出,此外,由于有效位数变少,更可能被舍入;
4、 从float或double 转化为 int 因为 int 没有小数部分,所以数据可能会向 0 的方向被截断。
int i , float f ,double d;
i==(int)(float)i; false;
f==(float)(int)f; false;
i==(int)(double) i; true;
f==(float)(double)f; true;
d==(float)d ;true;
f== -(- f); true;
(d+f)- d==f ; false;
值得分析的是最后一个,例如当 d=1.79* 10的308次方, f=1.0 时,因为d+f 时需要d 和 f 的阶数相同,因此需要对 f 的尾数进行向右移位,但可怜的float 尾数位只有24位,强大的double却有53 位,再怎么移位也不可能使其拥有相同的阶数,最后float被舍去而变为0,因此 左右不相同,故为false。
最后
以上就是孤独方盒为你收集整理的C语言的浮点类型及数据的相互转化的全部内容,希望文章能够帮你解决C语言的浮点类型及数据的相互转化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复