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语言 浮点数的阶码和尾数的长度是有限制的,超过的部分该如何处理?会有啥影响?的主要内容,如果未能解决你的问题,请参考以下文章

IEEE754浮点数表示法中阶码的范围是多少?

关于IEEE754标准浮点数阶码的移码

关于IEEE754标准浮点数阶码的移码

请问浮点数的尾数最前面的隐藏位是1还是0?

浮点数的加减运算都有哪些步骤

IEEE-754浮点数标准