首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的大功率

R中的大功率
EN

Stack Overflow用户
提问于 2014-03-11 07:25:00
回答 3查看 1.1K关注 0票数 1

我试着计算2**1000,并把数字的值加起来。对于所有的意图和目的,似乎我有正确的方法,但错误的答案,我不确定是否有一个特殊的方法来计算,或者我的选择可能是混乱的。

在任何情况下,R中的2**1000表示: 1.072e+301。我用过

代码语言:javascript
运行
复制
options("scipen"=400, "digits"=4)

为了去掉科学符号(因为我们想要数字),这给了我:

代码语言:javascript
运行
复制
10715086071862673211222842640062602864002646240220400600628246062604626466468802860684246408802204448642628020644428680866666080884644840024840004280840848880462604626804200880464480884860464420284266864402822668802420668620402620400466086288824662642224206428624064400880244462828666486484022626226666

所以,我做了一件天真的事情,对这些数字做了一个和():

代码语言:javascript
运行
复制
sum(1,0,7,1,5,0...)

但我得出的答案是1200,这是不正确的。我想不出和函数是怎么回事的,所以我假设选项把指数结果搞砸了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-11 08:32:10

您可以使用gmp库来处理大整数:

代码语言:javascript
运行
复制
library(gmp)
bigNum <- as.bigz(2)^1000
# Now we want to split into characters so we can sum the numbers:
chars <- as.integer(strsplit(as.character(bigNum), "")[[1]])
sum(chars)
# 1366
票数 1
EN

Stack Overflow用户

发布于 2014-03-11 07:39:44

为了计算2**1000,您必须使用BigInteger等效。

http://cran.at.r-project.org/web/packages/Brobdingnag/index.html

正确的答案是

2**1000 =

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

数字之和为1366

票数 1
EN

Stack Overflow用户

发布于 2014-03-11 08:09:54

或者,这里有另一种获得正确答案的方法(诀窍是将大整数作为字符串来进行数字拆分):

代码语言:javascript
运行
复制
options("scipen"=400, "digits"=4)
a <- 2^1000
a
[1] 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
b <- strsplit(as.character(a),"")[[1]]
b
  [1] "1" "0" "7" "1" "5" "0" "8" "6" "0" "7" "1" "8" "6" "2" "6" "7" "3" "2" "0" "9" "4" "8" "4" "2" "5" "0" "4" "9" "0" "6" "0" "0" "0" "1" "8" "1" "0" "5" "6" "1"
 [41] "4" "0" "4" "8" "1" "1" "7" "0" "5" "5" "3" "3" "6" "0" "7" "4" "4" "3" "7" "5" "0" "3" "8" "8" "3" "7" "0" "3" "5" "1" "0" "5" "1" "1" "2" "4" "9" "3" "6" "1"
 [81] "2" "2" "4" "9" "3" "1" "9" "8" "3" "7" "8" "8" "1" "5" "6" "9" "5" "8" "5" "8" "1" "2" "7" "5" "9" "4" "6" "7" "2" "9" "1" "7" "5" "5" "3" "1" "4" "6" "8" "2"
[121] "5" "1" "8" "7" "1" "4" "5" "2" "8" "5" "6" "9" "2" "3" "1" "4" "0" "4" "3" "5" "9" "8" "4" "5" "7" "7" "5" "7" "4" "6" "9" "8" "5" "7" "4" "8" "0" "3" "9" "3"
[161] "4" "5" "6" "7" "7" "7" "4" "8" "2" "4" "2" "3" "0" "9" "8" "5" "4" "2" "1" "0" "7" "4" "6" "0" "5" "0" "6" "2" "3" "7" "1" "1" "4" "1" "8" "7" "7" "9" "5" "4"
[201] "1" "8" "2" "1" "5" "3" "0" "4" "6" "4" "7" "4" "9" "8" "3" "5" "8" "1" "9" "4" "1" "2" "6" "7" "3" "9" "8" "7" "6" "7" "5" "5" "9" "1" "6" "5" "5" "4" "3" "9"
[241] "4" "6" "0" "7" "7" "0" "6" "2" "9" "1" "4" "5" "7" "1" "1" "9" "6" "4" "7" "7" "6" "8" "6" "5" "4" "2" "1" "6" "7" "6" "6" "0" "4" "2" "9" "8" "3" "1" "6" "5"
[281] "2" "6" "2" "4" "3" "8" "6" "8" "3" "7" "2" "0" "5" "6" "6" "8" "0" "6" "9" "3" "7" "6"
sum(as.integer(b))
[1] 1366

这适用于我的设置(即Mac与R2.14.2,32位),没有任何额外的软件包.在32位和64位的普通会话中也尝试过,他们都给了1366。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22318985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档