C语言 浮点数的阶码和尾数的长度是有限制的,超过的部分该如何处理?会有啥影响?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 浮点数的阶码和尾数的长度是有限制的,超过的部分该如何处理?会有啥影响?相关的知识,希望对你有一定的参考价值。
C语言
浮点数的阶码和尾数的长度是有限制的,超过的部分该如何处理?会有什么影响?
阶码超出的话,就溢出错误了,上溢的话程序就不能运算了;下溢的话,数据就从非0变成0了。有时会造成原则的错误(如除以0出错、求0的对数等等),有时则不造成严重的影响。
尾数超出的部分舍去, 这个就是平常所说实数处理的误差问题或精度问题。举个最简单的例子:1/10即0.1,在二进制下就无法准确地表示出来。(在二进制下,它是一个无限循环小数)追问
上溢和下溢表示什么意思?貌似有两种方式吧,就是截断和四舍五入?
追答上溢就是数字太大而不能存储,就好比在只有9档的算盘(每档上只有上1下4共5颗珠子)两数相加后等于10亿(需要10位数)。
下溢就是数字太小,而只能表示为0。
追问书上说,对于最小的数来说,右边被截断
最小的数大于或等于5,被抬高一位是什么意思
追答就是“四舍五入”的意思。
追问我是初学者,跪求过程,太抽象了,完全不能理解
追答我说到这个程度,还说抽象,I 服了 U。哪一句抽象啊?
追问我看的是德文....
追答👍高大上……
追问在德国上本科...才来半年....有点听不懂
参考技术A 尾数超出的部分舍去, 这个就是平常所说的精度问题阶码是整数, 如果是负整数超过范围, 整个浮点数被当作0.
如果是正整数超过范围, 就说明超出了数的表示范围, 统一被当作 "无穷大" 即是 inf
如果一个浮点数是inf, 和一般的浮点数计算有点区别
那就是: 任何一个有限数X
inf + X == inf
inf - X == inf
inf + inf == inf
inf * 正数 == inf
inf * 负数 == -inf
inf * 0 == NaN
inf - inf == NaN
其中 NaN是除了inf以外的另外一个特殊浮点数, 它表示 "不知道这个数应该是多少"
更多细节自行搜索查看浮点数国际标准: IEEE745 参考技术B 超过部分被截断,可能影响结果。 参考技术C 超出的部分不起作用被自动忽略,大多会影响结果
以上是关于C语言 浮点数的阶码和尾数的长度是有限制的,超过的部分该如何处理?会有啥影响?的主要内容,如果未能解决你的问题,请参考以下文章