浮点运算误差与输入输出系统详解
浮点运算误差
在计算机编程中,浮点运算误差是一个常见且需要重视的问题。大部分这里要讨论的算术误差在定点运算中也存在,其中最常见的当属舍入误差。舍入误差的产生主要有两个原因:一是可用于存储的位数有限;二是分数值在所有数制中无法精确表示。
与定点表示法相比,浮点运算的不同之处在于,CPU硬件可以移动算术结果的尾数,并相应地调整指数,这可能导致位丢失。而在整数运算中,任何位的移动在程序中都是明确的。
很多时候,我们容易把浮点数当作实数,但实际上它们并非实数。大多数浮点数只是其所代表实数的近似值。在使用浮点运算时,我们必须留意舍入对计算的影响。若不密切关注舍入效应,可能无法察觉计算中悄然出现的误差。
在进行整数计算时,我们要注意结果最高有效位的误差,如无符号整数的进位和有符号整数的溢出。而对于浮点数,小数点会进行调整以保持最高有效位的完整性。浮点运算中的大多数误差是由于为了使值适应分配的位数而在低位进行舍入造成的。这些误差虽然较为隐蔽,但会对程序的准确性产生重要影响。
下面通过一个具体的程序示例来进一步说明。运行如下程序:
$ ./addFloats
Enter a number: 123.4
Enter a number: 567.8
123.400002 + 567.799988 = 691.200012
从这个结果来看,运算似乎并不准确。在检查代码中的错误之前,我们使用调试器来探究一下具体情况:
(gdb) b
超级会员免费看
订阅专栏 解锁全文
9万+

被折叠的 条评论
为什么被折叠?



