2^n 的精确计算

northwolves 2006-10-31 09:46:04
各位高手:

已知 n为任意正实数,如何求2^n 的精确值,返回字符串类型。或求其整数部分亦可。
...全文
529 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwolves 2007-04-08
  • 打赏
  • 举报
回复
n为整数时这样处理,但这里要求n为小数
Leaveboss 2006-11-04
  • 打赏
  • 举报
回复
二分就行了吧,
2^n={ (2^(n/2))^2, n为偶
{ (2^((n-1)/2)^2*2, n为奇
这样时间会快很多,特别是在做n=100000以上的高精度运算时。
northwolves 2006-11-03
  • 打赏
  • 举报
回复
TO gxqcn:

谢谢郭老师,明白了
gxqcn 2006-11-02
  • 打赏
  • 举报
回复
楼主曾私下发消息给我,希望我关注此帖。本人虽然对高精度计算感兴趣,但之前及当下主要致力于大整数算法中,对浮点运算并没有深入研究,所以可能无法给出非常到位的算法。在此我按我的经验给出一些思路,权当抛砖引玉,不当之处敬请指正。

首先,需要有如下知识准备:大整数的高精度计算;误差分析。

关于 x=b^r(“^”为乘方运算,以下同),我们总可以归结为 b≥1,r>0 情形(如果 b<1,则 x=(1/b)^(-r);如果 r<0,则 x=1/(b^(-r))),对于底数 b,我们并不关心它是整数还是小数;对于指数 r>0,可以如下考虑:
(1) r 为正整数,直接用整数高精度计算,中间结果只需保留略高于指定精度的结果;
(2) r 可转化为分数,且分母比较小。则可先乘方后开方即可;
(3) 其它。这是最困难的,需要涉及大量的高等数学知识。以下详述之。

可以转化为:x = e^(r*ln(b)),其中需解决 f1(x)=ln(x)、f2(x)=e^x 的计算问题。

f1(x)的计算可用如下公式:∑(n=1→∞)[x^(2n-1)/(2n-1)] = 1/2ln((1+x)/(1-x)) (|x|<1)
f2(x)的计算则可直接用公式:f2(x) = e^x = ∑(n=0→∞)[x^n/n!] 计算到足够的精度为止即可。

所以,2^0.142857 可用 2^(1/7) 近似计算(精度有限);也可用 2^142857 再开 1000000 次方到任意指定精度;
如果用上面最后的方法(3),需要计算 ln(2) = ln((1+1/3)/(1-1/3)) = (1/3)+(1/3)^3/3+...

如果用方法(3),是否要将指数分解为“整数+纯小数”似乎没有必要;其它的视情况而定。
O___O 2006-11-02
  • 打赏
  • 举报
回复
o
mathe 2006-11-01
  • 打赏
  • 举报
回复
47355311200772711550784192468562036480077563783100181713119900920305\
46089992173980841695771756237707337637269351006774455898500428010139\
37733347799362145140761196388265399161710595722582986877574033733772\
99279947988223561500341239786843419027710733661162314248161803581401\
78983282367441512439279146509094846633374680421225517761538215457528\
07845052745456008360561787123443174623298637569655937494613211472146\
60265141541172539857513709928668633212821155060401087082429189261062\
25681676042297517095926812014136219398644438113002304998113213527235\
13319247590435023289552002353623056540103047558678307057938875177731\
09623662486308390071448952645700464951843269687371847250762578246462\
78959015754240063289575796528199018629005894327991057583118186410838\
80387927936250656605708919649717771864168781039426257297999171678061\
71044133071220840078082094093283757033465514628062557942235979503258\
32653080256332309133230298601945246746498027565691697433673542879173\
83134468417950658954353555086337255856498011354561326552036548410142\
64046141898244345806780328471764118421760581322467513410790840289701\
64518296746321550971257078101812675103524973847743307605164969428089\
92965371868292257922238073987773374558021635061091061413735488013021\
67125573087136436194761790098086054342756440668031768529634560372264\
41341225196711556231641112021292294848875530600180750371254201883370\
13337631663526362315212673730634833838948683450226660745190390167075\
70585879873130665716235077217429018626930215498823438819758118591970\
37526617839410315922783336750312912716432608435147776502492780713737\
09279510544923347099918855171743717783771696050220916728953738105314\
59969272293377070058127661174183514234196627727197795095858844471832\
01116816630666094016295402436095627638337270571118922011365000315474\
77403409395984637580627851184535306530383732083663499166357231425185\
33156381089199910580761218656909051701560470527619613755055043714313\
78203874238111418466689695027897152994688267746442191443336618155624\
87543108637105575521549380946651441499180847206629074038391627536693\
73392218144710003426446270779306997848368208787628269987965584007624\
88344117166719844174617343486389583877266178133643337488669418190804\
63641226472790832093819479891405502712253296390184749769264124079244\
30000970078217552884658661675722143003372692699715711809939888691649\
08788470880410354831554997714830159267622556417608715188907015424820\
11605823878486305044538837835275179823538308287589620603168805534069\
25975452254321473463315067646067376528286429880154418148436921963789\
81572855330132586402616085974399638105352782929559876050043108756226\
71445871177740751795141604451163033346445182842909515736499094918460\
97976257426600930395836284087707354753379809755553874095154636610915\
33651268534337820612498639217848808645340437240578907953070388618770\
39679199143771260103432681672230473888339155315962688315934066337348\
60399670757941173006694991573524131837560474636853909966075535679942\
09467990583800883196250975020539694686497106162763325027021841833069\
46813435537721404240678738695301221536017510309111610251898777672048\
53308199324402339578542319532314101305393298649752036474322266419243\
84392666085015067023806959193673740501407359059320400685976363789897\
16278215597114637525561722640733591609471269512663959453748805304135\
81812205446195341075293857985868006885301963155716498350841511554529\
71014619783102139164562543957126005180817954844405301613455802762258\
41942600134432117092652882536293368184946968991053711470077968011614\
89669903441329001191652394672997205158007107969806355412826517621432\
61896739967380768072279062414524928414967766143321806455512273306043\
34877644148638265039682599675246090821515297493008566639862308788503\
78401202047535447746274287464733619943798239660804759624152818915517\
96960254907190023565950812186367614037982428223527722309116305825299\
51759660874593605819715990796694073782130690514538572383788329690653\
03807639291223761144073231773559178291102542687326006986641757203408\
63088259253008703408353750077651033855482906789925858173034887387464\
05824615471978251935832181209062485037294067069357116214772674356526\
14407674351254571645050460820460464371990375811729777297032762859418\
15404285087906815819105448867193758753890315216168731502020660555994\
95961211009548260917041271732438678506429245982502363514332102017895\
91326659506551832552912892085635033540881182591943715977300675648520\
12169784998401816026276570718571134223729998294696101673073922643761\
31121550496003906969829800485061875272659256168501109059046804360460\
22249709456947202745896745855115091480483684694160972159859953563741\
49749661078204859376816652520814198340605880973408845002860653925921\
24775058722576832458356896316671062027182801996769360962716640419538\
93252277842417896051089011594514624577458628099430787863411963189445\
44295894703970797953079529283346603270533244324141171136693228104603\
87206821243986116673309256218413037894471299061563805146769437107437\
55857629986298539469543179482157756676267913999667336082194057350284\
04986724205130387975698389751949609150194022525740222275440251549094\
19857646250983433566892430683651111862760494702277917522119852041582\
53253594872965842135143123032868346555560632367418788727073508846836\
57067925402370282654925217225792833091009017848774769703755979589397\
26065706138554281776669781879797978985837613605536336892234743453578\
1629712988530092
mathe 2006-11-01
  • 打赏
  • 举报
回复
12457885848373682101773684630110655170390583684029196677371338883890\
52922855643692495489068557946824309512902388386703980363829057147505\
15081020246542406660001374028783834490398219873503622852527527152516\
70580614775233542229421893756464102125517120395275266499082390137321\
72594077870798390856415328398903557592496786334396530402456333043515\
35847070169240664066811147770750013811511750127278368591870281780655\
36261571431289239902176271154183521415457575943896036263565814684200\
22328943684437731315642535070827079000546451781321652868407503918105\
60735448230381607346963927232749890365191941413091912908320996984623\
81297440085248778773941703933666936348083046573842967281764997617302\
99280350342085120264876879321723067224866495585114452448086426166222\
07974190740298308372538631032798333924837470343923356011139033301301\
34438822008580199355336898725375324547610076020453134840154336442084\
05523845644172006014206775985949044981979970738456189677443701412162\
93298778225175644308079449558034664804775451598939454469817762504643\
85139687882328534585191250220949598240839372296105774608670331212582\
53629972699484194569706316587533930636423793786747515094319750119064\
79431193322737554446111342666694696542839822393699822092897486055211\
23000358396500798513457661354525869567716397209737032733809143911825\
60221823725816091484103019281604044171372717915236913869399847974557\
48697538983067342808783351980125737605456318042982476197835967229585\
65501807164325278435456561738423840425360757878605488115639133535027\
13968789649232929922770865814587139795408084967304628757761248171755\
80311525683112473104288130711561958059412764175874690422039205040732\
49760220252547415164127813394577216615078701640931656400662713299153\
86922695714666674478451726266968095731003403966218119889551921584550\
07425286222402913100043052623734929442692672662244794237345528514750\
17564016481499632182909403274595504882138962107565863569349117684515\
65541930756679172874320949081693721773763565238332264368970714849656\
21026755657425804832207757437782651612080270277408174190092855333774\
53085327031485557685225799046587313211991710112102824147695899303273\
25724924882284338538877971086074504704536000007951551517770481957673\
77572923429233512477218314696708041521369332837610697230866110702288\
67454825669823340475869555839877711689871134694932897420790420859246\
06994051771333371582677978029017760435925057598011604520591686670288\
58200566390195044490955201068092998713086217604706106867378829321345\
62743307739872839141311601550895160145000097088266431615486097492744\
01746750747338609451247803825790741015938023332077553779717224163524\
28636198161134627032728061430636692036854249056560353446871453898723\
46034023556744052370052467450301071452193879374770186066319530086885\
07846597326339600889937319463434310041534637633751675683145557116585\
96375601861004624145056611626137526777146891206868174059025136292786\
82714019582254405180619317041592565159378452153783253377768791847562\
89086156325949490941198589974955008585166641342780764087242393829752\
29290401048996063787345358557757978773473700266062112412942554586294\
54970853147755038866135399661216640379088147870242310080659790299845\
36612134078187442073529352993850481251395173996395143808089164816955\
71219827726486443259993481188546704161187757099661304681066770965491\
79499361056451572602977029815960411212202338900813825957913223661567\
56951593445260061092741705413965234066875741105547942537332114358581\
mathe 2006-11-01
  • 打赏
  • 举报
回复
直接使用一些现成的工具就可以了.
比如使用Linux下面的bc工具
$bc -l
scale=10010
e(l(2)*0.142857)
1.104089404345741537852138922036207023451651266709006943254144485585\
93245482234689747364928403105235830612324841007181711132265176251126\
53339097721079847886033097832857597890850281732989909249663203494406\
39646658142202103665415896912118752317801657732561075636687508044265\
26770146018545007194591775527853596962450117452420869665595815615139\
92857621124155071041788809459296807380551752771083589748967535751079\
53447952568080932616952550384945419483321617734344672929961248228628\
70867183227502006155779131709966599984769441120977244721805036651827\
08996703771880606325341645056627907244837471966007742071071816937364\
78341740883708884507567676076004657261581194346445898439043985736801\
33682602250391231562400916621515970292482276179837078898416874946637\
22982087912695657610189770016741550391880900786259452461132591486029\
05969452168965104599274079858767611900862659678735844957130815735181\
58407472999188781443184231619651204216451431391358730258368451990648\
73160748153888258771019731521806739908381162254509000838134885554993\
83913348464700013258681901588787854885331235382401576692842611317200\
26767089770863346238771566498080937678941112658067863133332767136757\
61280362469139032876827694040002863681406235018250533794844017250116\
00998054852623603363178362643034431749411525126851885933272512765120\
northwolves 2006-11-01
  • 打赏
  • 举报
回复
To idealguy(理想主义分子) :

壹万位太多,算个壹千位吧:

2^0.142857 =
1.104089404345741537852138922036207023451651266709006943254144485585932454822346897473649284031052358306123248410071817111322651762511265333909772107984788603309783285759789085028173298990924966320349440639646658142202103665415896912118752317801657732561075636687508044265267701460185450071945917755278535969624501174524208696655958156151399285762112415507104178880945929680738055175277108358974896753575107953447952568080932616952550384945419483321617734344672929961248228628708671832275020061557791317099665999847694411209772447218050366518270899670377188060632534164505662790724483747196600774207107181693736478341740883708884507567676076004657261581194346445898439043985736801336826022503912315624009166215159702924822761798370788984168749466372298208791269565761018977001674155039188090078625945246113259148602905969452168965104599274079858767611900862659678735844957130815735181584074729991887814431842316196512042164514313913587302583684519906487316074815388825877101973152180673990838116225451
-----------------------


谢谢,能提供算法么?
dengsf 2006-11-01
  • 打赏
  • 举报
回复
mathe经常列出一大堆数字,
吓得我一般都不敢看。
up
idealguy 2006-11-01
  • 打赏
  • 举报
回复
:)
idealguy 2006-11-01
  • 打赏
  • 举报
回复
壹万位太多,算个壹千位吧:

2^0.142857 =
1.104089404345741537852138922036207023451651266709006943254144485585932454822346897473649284031052358306123248410071817111322651762511265333909772107984788603309783285759789085028173298990924966320349440639646658142202103665415896912118752317801657732561075636687508044265267701460185450071945917755278535969624501174524208696655958156151399285762112415507104178880945929680738055175277108358974896753575107953447952568080932616952550384945419483321617734344672929961248228628708671832275020061557791317099665999847694411209772447218050366518270899670377188060632534164505662790724483747196600774207107181693736478341740883708884507567676076004657261581194346445898439043985736801336826022503912315624009166215159702924822761798370788984168749466372298208791269565761018977001674155039188090078625945246113259148602905969452168965104599274079858767611900862659678735844957130815735181584074729991887814431842316196512042164514313913587302583684519906487316074815388825877101973152180673990838116225451
northwolves 2006-10-31
  • 打赏
  • 举报
回复
To gxqcn:

-------------------------
结果用十进制表达,还是十六进制(二进制)表达?如果是后者,要简单得多。

二进制表达也无妨。

结果取整就可以了,降低难度。

郭先生对数字的研究令人敬佩,还请帮助则个
silence_dai 2006-10-31
  • 打赏
  • 举报
回复
是不是可以把每个整数k的lg(k)的值求个大概
再精确地得到n是在哪个范围内
代码我不会写...
就先抛块砖吧
mathe 2006-10-31
  • 打赏
  • 举报
回复
n不是正整数时,通常2^n是无理数,无法表达其精确值.
如果只要求计算[2^n],那导不难,主要是要支持大数运算就可以了.
先可以大概估计一下[2^n]有多少位,这个通过n*log10(2)就可以计算出来.
只要就是要保持一定的有效位精度进行大数运行
tailzhou 2006-10-31
  • 打赏
  • 举报
回复
n为任意正实数,不是整数;

16进制也不是那么简单呀,需要计算开方的哟;
gxqcn 2006-10-31
  • 打赏
  • 举报
回复
结果用十进制表达,还是十六进制(二进制)表达?如果是后者,要简单得多。
LiChenYue 2006-10-31
  • 打赏
  • 举报
回复
数值计算的书很多,关键字"数值计算"
LiChenYue 2006-10-31
  • 打赏
  • 举报
回复
数值计算中有这种算法的介绍.容易搜到的!
northwolves 2006-10-31
  • 打赏
  • 举报
回复
继续降低要求:

设n∈(0,1),求2^n 的精确值,精确到小数点后10000位,比如:n=0.142857
加载更多回复(2)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧