定理:
表示基数t中正整数S所需的位数(基数t)是⟦log t S⟧+ 1(⟦.⟧:下位函数)。
我想知道,代表计算机中最大正整数(浮点数)所需的位数(以2为底)是多少?我有64位操作系统和32位R。因此,我做到了:
.Machine$double.xmax # 1.797693e+308
typeof(.Machine$double.xmax) # double
floor(log(.Machine$double.xmax, 2))+1 # 1025
.Machine$integer.max # 2147483647
class(.Machine$integer.max) # integer
floor(log(.Machine$integer.max, 2))+1 # 31; (1 bit for sign bit)
因此,该理论适用于整数。
(1)但是该定理的二重等价怎么办?即,表示以t为底的双精度数所需的位数(以t为底)是多少?
(2)对于带小数的实数,这可能很难。因此,也许人们可能知道无十进制实数的等价定理(即“> 2147483647”)。
尤其是上面的1025是哪里来的?
(3)如果在以下情况下使用64位OS和64位R,我会得到63吗?
floor(log(.Machine$integer.max, 2))+1 # 63??; (1 bit for sign bit??)
答案 0 :(得分:0)
广告3)我不知道双精度,但是整数内部表示形式仍然是32位,即使在64位系统上也是如此。如果您想做得更大,则需要使用某种库,例如“ bit64”
您将获得有关help(double)
和help(integer)
的更多详细信息