大家好,欢迎来到IT知识分享网。
C语言提供了两种不同的浮点数据:float 和 double,即单精度和双精度浮点。
当在int(假设int是32位的)、float和double格式之间进行强制类型转换时,原则如下:
- 从 int 转换成 float,数字不会溢出,但是可能被舍入。
- 从 int、float 转换成 double,能够保留精确的数值。因为 double 有更大的范围和更高的精度(有效位数)。
- 从 double 转换成 float,因为 float 范围要小一些,所以值可能溢出成 +∞ 或 -∞。另外由于float精度较小,还可能被舍入。
- 从 float、double 转换成 int,值将会向零舍入。如1.999会被转成1,-1.999会被转成-1。同时值可能会溢出。
将大的浮点数转换成整数是一种常见的错误。
1996年6月4日,阿丽亚娜5型火箭(Ariane 5)初次航行,一个错误便产生了灾难性的后果。发射后仅仅37秒,火箭偏离了它的飞行路径,随后解体并且爆炸。火箭上载有价值5亿美元的通讯卫星。
后来调查发现,控制惯性导航系统的计算机向控制引擎喷嘴的计算机发送了一个无效数据。它没有发送飞行控制信息,而是送出了一个诊断位模式,表明在将一个64为浮点数转换成16位有符号整数时,产生了溢出。
溢出的值是火箭的水平速率,这比早先的Ariane 4 火箭所能达到的速度高出了5倍。在设计Ariane 4 时,开发人员小心地分析了这些数字值,并且确定水平速率不会超出一个16位数的表示范围。不幸的是,在Ariane 5 火箭的系统中简单重用了这部分代码,而没有检查它所基于的假设。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/87025.html