Zul*_*rce 5 floating-point precision double matlab
我在理解这些双精度的精度如何影响Matlab中算术运算的结果时遇到了一些麻烦.我认为既然a和b都是双倍的,他们就可以进行高达那么精确的操作.我意识到可能存在舍入错误,但由于这些数字完全在64位数字表示内,所以我认为这不是问题.
a = 1.22e-45
b = 1
a == 0
ans = 0 %a is not equal to zero
(a + b) == 1
ans = 1
Run Code Online (Sandbox Code Playgroud)
为什么它能够携带足够的精度来识别!= 0但是当加到1时它没有显示任何变化.
64位IEEE-754浮点数具有足够的精度(具有53位尾数)以表示大约16个有效十进制数字.但它需要更多像45个有效十进制数字来表示(1 + a)= 1.00 .... 000122和1.000之间的区别.
"浮动"点意味着 - 精度相对于数字本身的比例.
在您给出的具体示例中,1.22e-45可以单独表示,因为指数可以调整为表示10 ^ -45,或大约2 ^ -150.
另一方面,1.0以二进制表示,刻度为2 ^ 0(即1).
要添加这两个值,您需要对齐它们的小数点(呃...二进制点),这意味着1.22e-45的所有精度都向右移动了150多位.
当然,IEEE双精度浮点值只有53位尾数(精度),这意味着在1.0的范围内,1.22e-45实际上为零.
| 归档时间: |
|
| 查看次数: |
2382 次 |
| 最近记录: |