int n=10的sizeof 为什么是四_int、float、double数据类型之间转换的原则

c958b873bcff84f2179d3c0951d7b246.png

C语言提供了两种不同的浮点数据:float 和 double,即单精度和双精度浮点。

当在int(假设int是32位的)、float和double格式之间进行强制类型转换时,原则如下:

  1. 从 int 转换成 float,数字不会溢出,但是可能被舍入。
  2. 从 int、float 转换成 double,能够保留精确的数值。因为 double 有更大的范围和更高的精度(有效位数)。
  3. 从 double 转换成 float,因为 float 范围要小一些,所以值可能溢出成 +∞ 或 -∞。另外由于float精度较小,还可能被舍入。
  4. 从 float、double 转换成 int,值将会向零舍入。如1.999会被转成1,-1.999会被转成-1。同时值可能会溢出。

将大的浮点数转换成整数是一种常见的错误。

b8e969399ee1d1a2f91a1f34a03df9f0.png

1996年6月4日,阿丽亚娜5型火箭(Ariane 5)初次航行,一个错误便产生了灾难性的后果。发射后仅仅37秒,火箭偏离了它的飞行路径,随后解体并且爆炸。火箭上载有价值5亿美元的通讯卫星。

后来调查发现,控制惯性导航系统的计算机向控制引擎喷嘴的计算机发送了一个无效数据。它没有发送飞行控制信息,而是送出了一个诊断位模式,表明在将一个64为浮点数转换成16位有符号整数时,产生了溢出。

溢出的值是火箭的水平速率,这比早先的Ariane 4 火箭所能达到的速度高出了5倍。在设计Ariane 4 时,开发人员小心地分析了这些数字值,并且确定水平速率不会超出一个16位数的表示范围。不幸的是,在Ariane 5 火箭的系统中简单重用了这部分代码,而没有检查它所基于的假设。

0219a9484e95fe5d1656d05a836baa25.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值