看板 C_and_CPP 關於我們 聯絡資訊
獻給同是用C++做數值分析的研究生們!^^ 科科? 快從慢慢的 matlab 跳來快快的 C++ 吧? 程式庫載點:http://ppt.cc/ENG9 程式載點:http://ppt.cc/ZVT- 從下面的結果可以看到一般 double 所不能做的運算,mpfr都能輕易做到。 計算 I(n) = 0積到1 {(x^n)/(x+10)} dx, n=0~30 積法一: I(0) = ln(11/10) I(n) = 1/n-10 * I(n-1) normal c x 0= 0.09531017980432493500000000000000 x 1= 0.04689820195675065100000000000000 x 2= 0.03101798043249348600000000000000 x 3= 0.02315352900839845500000000000000 x 4= 0.01846470991601545400000000000000 x 5= 0.01535290083984547400000000000000 x 6= 0.01313765826821192100000000000000 x 7= 0.01148056017502363500000000000000 x 8= 0.01019439824976364800000000000000 x 9= 0.009167128613474628800000000000000 x10= 0.008328713865253717400000000000000 x11= 0.007621952256553737900000000000000 x12= 0.0071138107677959500000000000000 x13= 0.005784969245117427300000000000000 x14= 0.01357887897739715200000000000000 x15= -0.06912212310730485300000000000000 x16= 0.7537212310730485600000000000000 x17= -7.478388781318720600000000000000 x18= 74.83944336874276400000000000000 x19= -748.3418021084802400000000000000 x20= 7483.468021084802800000000000000 x21= -74834.63259180041500000000000000 x22= 748346.3713725495600000000000000 x23= -7483463.670247235300000000000000 x24= 74834636.74413903100000000000000 x25= -748346367.4013903100000000000000 x26= 7483463674.052364300000000000000 x27= -74834636740.48661800000000000000 x28= 748346367404.9019800000000000000 x29= -7483463674048.985400000000000000 x30= 74834636740489.89100000000000000 mpfr x 0= 0.095310179804324860043952123280765092220605365308644 x 1= 0.046898201956751399560478767192349077793946346913558 x 2= 0.03101798043248600439521232807650922206053653086442 x 3= 0.023153529008473289381210052568241112727968024689134 x 4= 0.018464709915267106187899474317588872720319753108659 x 5= 0.015352900847328938121005256824111272796802468913415 x 6= 0.013137658193377285456614098425553938698641977532519 x 7= 0.011480560923370002576716158601603470156437367531957 x 8= 0.010194390766299974232838413983965298435626324680429 x 9= 0.0091672034481113687827269712714581267548478643068237 x10= 0.0083279655188863121727302872854187324515213569317632 x11= 0.0076294357202277873636062180549035845756955215914593 x12= 0.0070389761310554596972711527842974875763781174187403 x13= 0.0065333156125223261042115490801020473131419027356735 x14= 0.0060954153033481675293130806275509554400095440718364 x15= 0.0057125136331849913735358603911571122665712259483028 x16= 0.0053748636681500862646413960884288773342877405169724 x17= 0.0050748927302638432359389802921818148924167124773344 x18= 0.0048066282529171231961657526337374066313884307822119 x19= 0.0045652964181971890909740526099943547387472711252497 x20= 0.0043470358180281090902594739000564526125272887475027 x21= 0.004148689438766528145024308618483092922346160144021 x22= 0.0039676510668801730952114592697145253219929440143356 x23= 0.0038017502007634864391897551289417033018096902914264 x24= 0.0036491646590318022747691153772496336485697637524026 x25= 0.0035083534096819772523088462275036635143023624759742 x26= 0.0033780043647186890153730761865018263954379137017964 x27= 0.0032569933898501468833062751720187730826579000190726 x28= 0.0031443518157842454526515339940979834591352855235601 x29= 0.00303924046284720064589845316246844127071611028164 x30= 0.0029409287048613268743488017086489206261722305169328 積法二. I(30)=0 I(n-1) = 1/(10*n) - 1/10*I(n) normal c x30= 0.000000 x29= 0.003333333333333333500000000000000 x28= 0.003114942528735632400000000000000 x27= 0.003259934318555008700000000000000 x26= 0.003377710271848203200000000000000 x25= 0.003508382818969026300000000000000 x24= 0.003649161718103097500000000000000 x23= 0.003801750494856356900000000000000 x22= 0.003967651037470885800000000000000 x21= 0.004148689441707457600000000000000 x20= 0.004347035817734016700000000000000 x19= 0.004565296418226598300000000000000 x18= 0.004806628252914182100000000000000 x17= 0.005074892730264137500000000000000 x16= 0.005374863668150056700000000000000 x15= 0.005712513633184994700000000000000 x14= 0.006095415303348167600000000000000 x13= 0.006533315612522326700000000000000 x12= 0.007038976131055460500000000000000 x11= 0.007629435720227787500000000000000 x10= 0.008327965518886313800000000000000 x 9= 0.009167203448111369700000000000000 x 8= 0.01019439076629997400000000000000 x 7= 0.01148056092337000300000000000000 x 6= 0.01313765819337728600000000000000 x 5= 0.01535290084732893700000000000000 x 4= 0.01846470991526710800000000000000 x 3= 0.02315352900847329100000000000000 x 2= 0.03101798043248600200000000000000 x 1= 0.04689820195675140100000000000000 x 0= 0.09531017980432486500000000000000 mpfr x30= 0 x29= 0.0033333333333333333333333333333333333333333333333333 x28= 0.0031149425287356321839080459770114942528735632183908 x27= 0.0032599343185550082101806239737274220032840722495895 x26= 0.0033777102718482028826856413063309615033752964787448 x25= 0.0035083828189690258655775897155207500035086241982794 x24= 0.0036491617181030974134422410284479249996491375801721 x23= 0.0038017504948563569253224425638218741667017529086495 x22= 0.0039676510374708860465981905262265082355037377526133 x21= 0.0041486894417074568498856354928318946309950807701932 x20= 0.0043470358177340162197733412126215724416623966848854 x19= 0.0045652964182265983780226658787378427558337603315115 x18= 0.0048066282529141822674608913068630578296797818615857 x17= 0.005074892730264137328809466424869249772587577369397 x16= 0.0053748636681500568553543474751601338462706540277662 x15= 0.0057125136331849943144645652524839866153729345972234 x14= 0.0060954153033481672352202101414182680051293732069443 x13= 0.0065333156125223261336208361287153160566299198221627 x12= 0.0070389761310554596943302240794361607020293157100914 x11= 0.0076294357202277873639003109253897172631304017623242 x10= 0.0083279655188863121727008779983701191827778689146767 x 9= 0.0091672034481113687827299122001629880817222131085323 x 8= 0.010194390766299974232838119891094812302938889800258 x 7= 0.011480560923370002576716188010890518769706111019974 x 6= 0.013137658193377285456614095484625233837315103183717 x 5= 0.015352900847328938121005257118204143282935156348295 x 4= 0.018464709915267106187899474288179585671706484365171 x 3= 0.023153529008473289381210052571182041432829351563483 x 2= 0.031017980432486004395212328076215129190050398176985 x 1= 0.046898201956751399560478767192378487080994960182301 x 0= 0.09531017980432486004395212328076215129190050398177 程式碼: http://codepad.org/Glbn3yeN -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.175.35
damody:題目來自 書:數值分析 使用c語言 程、耿、張、王等著 04/30 10:22
EdisonX:這lib沒見過,不知效能如何,先行謝過. 04/30 10:29
angleevil:不要像perl隨便就一天的話,也不用太care效率 04/30 10:37
damody:之前學長算 2^4096 用MATLAB算三天沒出來,這個兩小時OK 04/30 10:55
damody:但那個時候我跟學長還只能在LINUX上跑 04/30 10:56
EdisonX:原來 2^4096 需要2個小時 .. XD 04/30 10:57
angleevil:= =10^12 k 04/30 11:02
EdisonX:對不起,我沒要吐槽的意思,只是我覺得2^4096這特例算出來應 04/30 11:24
EdisonX:要很快才對.http://codepad.org/6j4ruUJG 還沒最佳化. 04/30 11:24
EdisonX:16ms,但這份code較便利是無誤. 04/30 11:25
damody:喔抱歉,我指的是2^4096精度的運算,沒說清楚抱歉 04/30 11:50
EdisonX:了解.感謝分享. 04/30 11:54
meconin:還是走 GMP 的底層,包得比較人性化? 05/02 15:04
damody:GMP沒有log函數 05/02 22:57
damody:不然我就懶的編MPFR了 XD 05/02 22:58