C语言的浮点类型及数据的相互转化

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。

在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值