我想要准确地表示大整数。什么范围的积分值可以用double精确表示?
答案 0 :(得分:2)
如果您的机器使用IEEE双打,则尾数为52位。
领先1
是隐含的。因此,尾数中的全比特一可以
表示值(2^53)-1
(带有适当的指数)。
但是,任何2的幂(最多约+ - 1023)也可以精确表示,2^53
是
2的力量。
这显示在R中,值为.Machine$double.digits
(我机器上的53),
尾数(基数为2)的数字,包括隐含的前导1
。
因此,可以精确表示的最大整数值是
2^.Machine$double.digits
,最小的是对这个值的否定。
示范:
2^.Machine$double.digits - 0:5
## [1] 9007199254740992 9007199254740991 9007199254740990 9007199254740989 9007199254740988 9007199254740987
2^.Machine$double.digits + 0:5
## [1] 9007199254740992 9007199254740992 9007199254740994 9007199254740996 9007199254740996 9007199254740996
- 2^.Machine$double.digits + 0:5
## [1] -9007199254740992 -9007199254740991 -9007199254740990 -9007199254740989 -9007199254740988 -9007199254740987
- 2^.Machine$double.digits - 0:5
## [1] -9007199254740992 -9007199254740992 -9007199254740994 -9007199254740996 -9007199254740996 -9007199254740996