跳转到内容

实数: 错误

来自维基教科书,开放的书籍,为开放的世界

试卷 2 - ⇑ 数据表示基础 ⇑

← 浮点数规范化 浮点误差 字符形式的十进制数字 →



有效数字

[编辑 | 编辑源代码]
  • 使用浮点数有什么缺点?
  • 你可能会遇到什么错误?

使用浮点数时,您必须平衡数字的范围和精度。也就是说,您是想拥有一个非常大的值范围,还是想要一个非常精确的数字,精确到小数点后很多位。这意味着您将始终权衡用多少位来表示尾数,以及用多少位来表示指数。总结如下

  • 如果您想要一个非常精确的数字,请为尾数使用更多位,为指数使用更少的位,因为这将允许更多的小数位。
  • 如果您想要一个更大的数字范围,请为指数使用更多位,为尾数使用更少的位。

舍入误差

[编辑 | 编辑源代码]

当我们试图表示某些数字时,有时我们无法在给定的空间内做到这一点,例如,试图写下 1/3 = 0.33333333;你明白我的意思吗?使用浮点数时,您无法始终获得完美的精度,有时我们会遇到错误。

将此方程输入谷歌

999999999999999 - 999999999999998

浏览器将执行浮点计算,并给出答案 0!

因此,认识到使用浮点数可能存在舍入误差,我们将看看可能出现的不同误差。下面的数字想要用二进制 23.27 表示,我们能得到的最接近的值是 23.25。

绝对误差

[编辑 | 编辑源代码]

这是所需值与舍入值之间的实际数字差异。



Where  means: make  positive.
Example 1:
|23.27 – 23.25| = 0.02 absolute error
Example 2:
|23.27 – 23.29| = 0.02 absolute error
练习:绝对误差

给出以下数字的绝对误差

试图表示 3.333 时,您能得到的最接近的值是 3.25

答案

3.333 - 3.25 = 0.083

试图表示 12.67 时,您能得到的最接近的值是 12.625

答案

12.67 - 12.625 = 0.045


使用 8 位定点无符号分数,其中 4 位用于小数点

找到试图表示 8.8 的绝对误差

答案

1000.1101 = 8.8125,我们能得到的最接近的值
8.8 - 8.8125 = -0.0125

相对误差

[编辑 | 编辑源代码]

这是所需值与舍入值之间的百分比差异。



Example:
(23.27 – 23.25) / 23.27 = 0.09%
练习:相对误差

给出以下数字的相对误差

试图表示 3.333 时,您能得到的最接近的值是 3.25

答案

  • 3.333 - 3.25 = 0.083
  • (0.083 / 3.333)*100 = 2.49%

试图表示 12.67 时,您能得到的最接近的值是 12.625

答案

  • 12.67 - 12.625 = 0.045
  • (0.045/12.67)*100 = 0.36%

使用 8 位定点无符号分数,其中 4 位用于小数点

找到试图表示 8.8 的绝对误差

答案

  • 1000.1101
  • 8.8 - 8.8125 = 0.0125
  • (0.0125/8.8)*100 = 0.14%

抵消误差

[编辑 | 编辑源代码]

将一个非常小的数字加到一个非常大的数字上,对大的数字没有任何影响,涉及非常大或非常小的数字的方程将给出错误的结果。上面的网络搜索引擎示例很好地证明了这一点

999999999999999 - 999999999999998 = 0

您也可能看到类似以下内容

999999999999999 - 1 = 0

当一个数字或一个方程的结果太小时,您的尾数和指数可能没有足够的位数来显示它。在下面的示例中,该数字将被注册为 0。

Try and show 0.0000000000000000000000000001 in 12 bit FP

当一个和的结果太大而无法用您的数字系统表示时,您可能会用尽表示它的空间,并最终存储一个更小的数字。

Try and show 99,999,999,999,999,999,999 in 12 bit FP
华夏公益教科书