2010-12-05 105 views
0

我需要找到向上舍入的巨大(5k位左右)数字的立方根。 我该怎么做?查找大数的立方根

+0

您是否尝试过http://www.gnu.org/software/bc/?或者如果你需要用某种特定的语言来做到这一点,那它是什么语言?是否有特定的时间/空间限制? – 2010-12-05 19:18:14

+0

我试过bc,但它不喜欢非整数(1/3)指数 – Dani 2010-12-05 19:23:17

回答

0

这是straightforward iterative algorithm。需要注意的是,他们提出一个观点唱出special case of square roots的:

一个特殊情况是大家熟悉的 平方根算法。通过设置N = 2,在步骤2 迭代规则变成平方根迭代规则

可以应用于立方根相同的技术:设置N = 3和迭代,直到获得所需的precision

对于注释中的规范“它需要四舍五入到最接近的整数并且是精确的”,这只适用于具有整数或有理立方根的数字。也就是说,可以使用引用的算法通过迭代直到一个迭代的结果与下一个迭代的结果之间的差值小于0.5来找到对这个精度级别的答案。这足够接近以确保将来的迭代不会远离那个近似值。

这是数学分析课的练习吗?如果是这样,我怀疑这正是为什么这样提出问题的原因:教师希望你将具体问题应用于一般规则。

+0

我不需要精确度...正如我所说的,我需要四舍五入取整 – Dani 2010-12-05 19:24:05

5

如果GNU BC是对你罚款,这可能会做:

http://phodd.net/gnu-bc/bcfaq.html#bccbrt

编辑:

它本质归结为:

$ bc -l 
define cbrt(x) { return e(l(x)/3) } 

您将需要增加以便具有必要的精度:

$ bc -l 
bc 1.06.95 
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. 
This is free software with ABSOLUTELY NO WARRANTY. 
For details type `warranty'. 

define cbrt(x) { return e(l(x)/3) } 

cbrt(10000000000000000000000000000000000000000000000000000000000000000000)^3 
9999999999999999999845725361475980907263179272258247094885777761435.\ 
89049462743995306310 

scale=1000 

cbrt(10000000000000000000000000000000000000000000000000000000000000000000)^3 
9999999999999999999999999999999999999999999999999999999999999999999.\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999999999999999999999999\ 
99999999999999999999999999999999999999999999999978254573198390239858\ 
069738839057154871628814670160708326688382280410 

正如你可能已经注意到的那样,在不增加scale变量的情况下(在我的系统上默认为20),结果远不及你所要求的精度。