mirror of
https://github.com/boostorg/multiprecision.git
synced 2025-05-12 14:01:48 +00:00
191 lines
6.5 KiB
Plaintext
191 lines
6.5 KiB
Plaintext
[/
|
|
Copyright 2011 - 2020 John Maddock.
|
|
Copyright 2013 - 2019 Paul A. Bristow.
|
|
Copyright 2013 Christopher Kormanyos.
|
|
|
|
Distributed under the Boost Software License, Version 1.0.
|
|
(See accompanying file LICENSE_1_0.txt or copy at
|
|
http://www.boost.org/LICENSE_1_0.txt).
|
|
]
|
|
|
|
[section:rational_real_world Rational Real World Tests]
|
|
|
|
The first set of [@../../performance/rational_bernoulli_bench.cpp tests] measure the times taken to
|
|
calculate the n'th Bernoulli number via mixed rational/integer arithmetic to give an exact rational result.
|
|
|
|
[table Relative times taken to calculate Bm
|
|
[[m][cpp_rational (time in seconds)][mpq_rational (time relative to cpp_rational)][mpq_class (time relative to cpp_rational)]]
|
|
[[50][1.888453][1.7317576874][1.893438174]]
|
|
[[54][2.250503][2.1519411438][2.4936252029]]
|
|
[[58][2.734527][2.2056805437][1.9866752093]]
|
|
[[62][3.318122][2.5182796172][2.2662876772]]
|
|
[[66][3.887281][2.4263077457][2.588347485]]
|
|
[[70][4.628535][1.9756346231][2.5367158291]]
|
|
[[74][5.3541][1.7052929531][2.3345854579]]
|
|
[[78][6.321172][1.6669601776][2.0390342171]]
|
|
[[82][7.13052][1.7689101216][1.9837833706]]
|
|
[[86][8.390095][1.6245518078][1.5785492298]]
|
|
[[90][10.62176][1.6294440846][1.5779053566]]
|
|
[[94][11.364409][1.5786845581][1.5614997665]]
|
|
[[98][14.030636][1.2616490799][1.4799734666]]
|
|
[[102][15.268211][1.6145657798][1.6128342738]]
|
|
[[106][15.253028][1.8985381788][1.8206293859]]
|
|
[[110][17.637756][1.8283953469][1.6559522084]]
|
|
[[114][18.335007][1.8018346543][1.8343225612]]
|
|
[[118][21.044146][2.0462015897][1.8106934346]]
|
|
[[122][23.71295][2.0041556196][1.7127701108]]
|
|
[[126][25.993901][1.9901613075][1.6974264848]]
|
|
[[130][30.17278][1.8897211328][1.6405006433]]
|
|
[[134][43.992333][1.2223514038][1.2232961594]]
|
|
[[138][40.702777][1.3551305848][1.492072224]]
|
|
[[142][47.01495][1.4361410785][1.4005683724]]
|
|
[[146][51.468592][1.4279172043][1.4072223891]]
|
|
[[150][70.736106][1.3628087048][1.2309294917]]
|
|
[[154][74.638691][1.2509392749][1.2846060497]]
|
|
[[158][76.642396][1.3383691449][1.2555573941]]
|
|
[[162][104.906795][1.1722665057][1.0121124375]]
|
|
[[166][108.175914][0.9272805682][1.2472813403]]
|
|
[[170][125.363885][0.8114005082][1.1349673712]]
|
|
[[174][119.813754][0.9747547014][1.5677900135]]
|
|
[[178][130.672631][0.904429444][1.6089208382]]
|
|
[[182][136.002124][0.8359445107][1.3173987636]]
|
|
[[186][152.169271][0.7919228515][1.3523570012]]
|
|
[[190][149.444035][0.8353259734][1.4571606823]]
|
|
[[194][149.609183][0.8898088896][1.6132629038]]
|
|
[[198][167.594528][0.8947434429][1.326461858]]
|
|
]
|
|
|
|
In this use case, most the of the rational numbers are fairly small and so the times taken are dominated by
|
|
the number of allocations performed. The following table illustrates how well each type performs on suppressing
|
|
allocations:
|
|
|
|
[table Total Allocation Counts for Bernoulli Number Calculation
|
|
[[m][cpp_rational][mpq_rational][mpq_class]]
|
|
[[2][0][77][101]]
|
|
[[4][0][187][252]]
|
|
[[6][0][345][471]]
|
|
[[8][0][551][758]]
|
|
[[10][0][805][1113]]
|
|
[[12][0][1107][1536]]
|
|
[[14][0][1457][2027]]
|
|
[[16][0][1857][2587]]
|
|
[[18][0][2336][3216]]
|
|
[[20][0][2885][3913]]
|
|
[[22][6][3511][4706]]
|
|
[[24][22][4203][5600]]
|
|
[[26][83][4963][6575]]
|
|
[[28][377][5806][7632]]
|
|
[[30][780][6738][8769]]
|
|
[[32][1454][7771][9988]]
|
|
[[34][2001][9357][11289]]
|
|
[[36][2789][10598][12704]]
|
|
[[38][3669][11948][14252]]
|
|
[[40][4653][13403][15891]]
|
|
[[42][5923][14976][17620]]
|
|
[[44][7379][16622][19449]]
|
|
[[46][8839][18367][21367]]
|
|
[[48][10296][20227][23431]]
|
|
[[50][12045][22857][25646]]
|
|
[[52][13603][25044][27962]]
|
|
[[54][15276][27331][30389]]
|
|
[[56][17239][29749][32919]]
|
|
[[58][19337][32257][35552]]
|
|
[[60][21409][34958][38417]]
|
|
[[62][23694][37800][41396]]
|
|
[[64][27923][39556][44498]]
|
|
[[66][30240][44706][47711]]
|
|
[[68][32566][47934][51042]]
|
|
[[70][35019][51417][54637]]
|
|
[[72][37460][55047][58363]]
|
|
[[74][40282][58777][62211]]
|
|
[[76][42914][62691][66183]]
|
|
[[78][45752][66694][70296]]
|
|
[[80][48681][70905][74620]]
|
|
[[82][51986][77633][79160]]
|
|
[[84][54855][82364][83842]]
|
|
[[86][59032][87239][88659]]
|
|
[[88][63595][92256][93618]]
|
|
[[90][68352][97486][98820]]
|
|
[[92][72446][102974][104256]]
|
|
[[94][76468][108620][109844]]
|
|
[[96][80361][111109][115594]]
|
|
[[98][84783][121460][121486]]
|
|
[[100][89044][127730][127633]]
|
|
[[102][93561][134241][134050]]
|
|
[[104][98452][140919][140616]]
|
|
[[106][103530][147763][147364]]
|
|
[[108][108326][154804][154276]]
|
|
[[110][113891][162184][161562]]
|
|
[[112][119213][169736][169038]]
|
|
[[114][124770][182417][176693]]
|
|
[[116][130624][190589][184519]]
|
|
[[118][137941][198975][192525]]
|
|
[[120][144829][207759][200952]]
|
|
[[122][152045][216736][209561]]
|
|
[[124][158610][225905][218371]]
|
|
[[126][165383][235283][227360]]
|
|
[[128][173971][230678][236670]]
|
|
[[130][181696][248593][246308]]
|
|
[[132][189310][258615][256148]]
|
|
[[134][197708][268800][266192]]
|
|
[[136][205800][279215][276436]]
|
|
[[138][212940][290112][287167]]
|
|
[[140][217502][301235][298101]]
|
|
[[142][223486][312564][309243]]
|
|
[[144][229579][324133][320605]]
|
|
[[146][237213][344671][332333]]
|
|
[[148][248799][357200][344420]]
|
|
[[150][261345][369947][356745]]
|
|
[[152][272741][382909][369279]]
|
|
[[154][283982][396162][382048]]
|
|
[[156][293626][409993][395353]]
|
|
[[158][304036][424022][408907]]
|
|
[[160][313869][427747][422690]]
|
|
[[162][323626][454723][436715]]
|
|
[[164][333294][469863][451304]]
|
|
[[166][343072][485238][466149]]
|
|
[[168][352236][500922][481221]]
|
|
[[170][362793][516840][496561]]
|
|
[[172][372645][533169][512315]]
|
|
[[174][382908][549962][528510]]
|
|
[[176][392507][567018][544947]]
|
|
[[178][404163][597694][561666]]
|
|
[[180][417539][615615][578647]]
|
|
[[182][432009][634079][596234]]
|
|
[[184][444684][652902][614114]]
|
|
[[186][457104][672042][632248]]
|
|
[[188][469331][691451][650654]]
|
|
[[190][481583][711512][669753]]
|
|
[[192][477225][698188][689111]]
|
|
[[194][488955][736905][708760]]
|
|
[[196][499797][757502][728675]]
|
|
[[198][511163][778591][749102]]
|
|
]
|
|
|
|
The second [@../../performance/rational_determinant_bench.cpp example] measures the time taken to calculate the determinant of a 3x3 matrix of rational
|
|
numbers. These numbers are randomly generated with /n/ bits in both numerator and denominator. In this case the rate limiting step is the cost of
|
|
calculating the GCD's during the computation:
|
|
|
|
|
|
[table Relative Time Taken to Calculate 100 Determinants of Random 3x3 Matrixes
|
|
[[Bits][cpp_rational (ms)][mpq_rational (relative to cpp_rational)][mpq_class (relative to cpp_rational)]]
|
|
[[512][45][0.3111111111][0.3177777778]]
|
|
[[1024][103][0.3038834951][0.3038834951]]
|
|
[[2048][251][0.3087649402][0.3011952191]]
|
|
[[4096][667][0.2983508246][0.2893553223]]
|
|
[[8192][2033][0.261682243][0.2956222332]]
|
|
[[16384][6423][0.2358710883][0.3059318076]]
|
|
[[32768][24223][0.1875903067][0.1955992239]]
|
|
]
|
|
|
|
[table:platform Platform Details
|
|
[[][Version]]
|
|
[[Compiler][GNU C++ version 10.3.0]]
|
|
[[GMP][6.2.0]]
|
|
[[MPFR][262146]]
|
|
[[Boost][107800]]
|
|
[[Run date][Sep 30 2021]]
|
|
]
|
|
|
|
[endsect]
|