实数: 错误
- 使用浮点数有什么缺点?
- 你可能会遇到什么错误?
使用浮点数时,您必须平衡数字的范围和精度。也就是说,您是想拥有一个非常大的值范围,还是想要一个非常精确的数字,精确到小数点后很多位。这意味着您将始终权衡用多少位来表示尾数,以及用多少位来表示指数。总结如下
- 如果您想要一个非常精确的数字,请为尾数使用更多位,为指数使用更少的位,因为这将允许更多的小数位。
- 如果您想要一个更大的数字范围,请为指数使用更多位,为尾数使用更少的位。
当我们试图表示某些数字时,有时我们无法在给定的空间内做到这一点,例如,试图写下 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,我们能得到的最接近的值 |
这是所需值与舍入值之间的百分比差异。
Example:
(23.27 – 23.25) / 23.27 = 0.09%
练习:相对误差 给出以下数字的相对误差 试图表示 3.333 时,您能得到的最接近的值是 3.25 答案
试图表示 12.67 时,您能得到的最接近的值是 12.625 答案
使用 8 位定点无符号分数,其中 4 位用于小数点 找到试图表示 8.8 的绝对误差 答案
|
将一个非常小的数字加到一个非常大的数字上,对大的数字没有任何影响,涉及非常大或非常小的数字的方程将给出错误的结果。上面的网络搜索引擎示例很好地证明了这一点
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