summaryrefslogtreecommitdiff
path: root/bench/bigint.myr
blob: f1ac0f90af1767e6e0707cd8737a92a5da139040 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
use std
use testr

const main = {
	var a, b

	a = std.get(std.bigparse(astr))
	b = std.get(std.bigparse(bstr))
	testr.bench([
		[.name="bigfactorial-1",	.fn={ctx; bigfact(1)}],
		[.name="bigfactorial-100",	.fn={ctx; bigfact(100)}],
		[.name="bigfactorial-1000",	.fn={ctx; bigfact(1000)}],
		[.name="bigfactorial-10000",	.fn={ctx; bigfact(10000)}],
		[.name="bigmul-bothbig", 	.fn={ctx; bigmul(a, b)}],
	][:])
}

const bigfact = {n
	var i
	var x, y

	if n == 0
		x = std.mkbigint(1)
	else
		x = std.mkbigint(n)
		for i = n-1; i > 0; i--
			y = std.mkbigint(i)
			std.bigmul(x, y)
			std.bigfree(y)
		;;
	;;
	-> x
}

const bigmul = {a, b
	var r = std.bigdup(a)
	std.bigmul(r, b)
	std.bigfree(r)
}

const astr = \
	"786226786586600439317972610307453185844816038396887410361680" \
	"057562738205768169440311788359575359662484806302309290559269" \
	"528840503089778892166969404943179665354542662022501031093355" \
	"271292443882546985002869031472840087285045002214375586489512" \
	"119373071089907222993450120378930997902435685145827038085819" \
	"296865519485069915539726113453392326014373721767082018422958" \
	"717062721702582361925462085790615747641302901942695904395406" \
	"834224622529709782228408774414640957447279927460707815981786" \
	"406994864430875491075424852796017575153912350736693997340109" \
	"179809249816546470560796013608371676540452470243110540567406" \
	"131454930387632550432649269771702882918734039217249418671214" \
	"578343865544182288638782234366945485699781398626899358422106" \
	"382221586857747438786541396870348009298608214885868257313676" \
	"649092812753573767742580234440720920671581633553397695353934" \
	"132303144338968914681227568810598784423402415568066389616154" \
	"614818275979465719251274076724898041828550631986321592027149" \
	"396140957537591558324156214045032930669195479259917491373556" \
	"8106323004563791966979449"

const bstr = \
	"187308423231504228611111080270112029294766282678254231118742" \
	"976869035200603975231371287575334271604770730635239117286259" \
	"633494749566591369947211092881454729202366597231676526591300" \
	"648610814270646993620412724160164594497114189417456618983125" \
	"754243263403220712648959862959656559260934591165571538609438" \
	"590305501075673585878506798890948928998460512317734318100422" \
	"301601872241161203780242712104705885977145795396152336901291" \
	"797346494631790697490596412053544611041844456774577364325024" \
	"070127433788225479200261038961006069382091341032772858886595" \
	"126748124988322385484529859500424755864562815273650872459428" \
	"604927038475035756775266526245762679156608674463485106692013" \
	"334198263770435008762560094658051091261225051459463607555576" \
	"909910323885506799911997243762894976997772525420734032010908" \
	"232750510323630849750298879815023574738441149575389970852774" \
	"177147447530826963987253002135706371359716529615192991331710" \
	"358753881164433191999293286713740248283177543479283727214184" \
	"724131647548393947909056785714667606883184085430899204162328" \
	"826158851207379006944693295498006311569980249630659828437857" \
	"675974052589856026178343278810044863262932813277009490639496" \
	"536609737088886342712009625141736821206684450062603392153153" \
	"404209821474892409175922249782691829080890709213170466577080" \
	"377570831150029278547755147996902849300234357700933105059734" \
	"535663014087527221170181231192295192940913638374876317838628" \
	"513685521076746695302116096246663697634145614610623764326966" \
	"034284535477345974781679205896638416144421212858502427308326" \
	"932579573129945442468876557939601952816014080189349604230705" \
	"365868935617410975446640273108649254906769023875954001915851" \
	"664244700370024600464468562174205614316632651533572360375076" \
	"397825425411906188567274646160369108041601789830804365153321" \
	"786129972802577217675779977803595583990850309499110057500386" \
	"963299465049980241112611167139170503250450996990310096129565" \
	"074487177158657223017144483992415686889386032110805070566222" \
	"391021704709176968022469625318920962164345682090022548949639" \
	"373535013410140815528983041981416489359560548762773247027894" \
	"433410249929507117822644701257908554656601684665483333856314" \
	"445354748390977894664864352404291796587312266255127874784721" \
	"619161441066868319035508018794580703871852715612431050120428" \
	"135204914805088588056364008960061473425114169699056353553362" \
	"684434702224467541950013135029769757734688969972162892564754" \
	"794607854348784493170718776237831436345037722624425771190246" \
	"018034960769040875816438953729709133678842811906949629452358" \
	"733021110486943979165015168688484556308945464367476269193790" \
	"416269749963298838914536589681414703854517183672658308513799" \
	"079924527379662830333236086766377066200832536550279672992236" \
	"534386204300849885908109898105830852146495986415657102811369" \
	"595247130333705192417745868596617533375480391948415664293960" \
	"986757335528872844228230415255122202991202927184519763895621" \
	"784166281785570962980369244162505438453718048719964848583896" \
	"857048160613386597344498469472976896546659619163220731196501" \
	"323014018615871231780371169751103683603599982508157269363828" \
	"411288512876302246976722591644117294608452539733909759953439" \
	"531429839711890887198366410539288744251028511505016177386244" \
	"749167411006850944434211305749841593738801775687547388254201" \
	"939297777489971469491544250094576226609276643868397292318619" \
	"638481092861366771094145813562129333311647611902685299968882" \
	"120832495897029738418349759779717411822241304202704141876186" \
	"021609477309152514796122336409731627673520687854759447557901" \
	"364641037659836873710690927438194862217026533565020830538006" \
	"474368344215360348610383201842027979922422061958838533809305" \
	"769494429697360443510783300535985639987094328411985571590736" \
	"668585260182179277329957988272484981238401320570887133681587" \
	"104377431152847065007690135501166962851804129900971535475096" \
	"780466463541055999770138832441321686999264335797733246187289" \
	"627201885855368556615429895387994196080244415898422345868310" \
	"490709239989887413180596388426579419833690268988006284505869" \
	"050445508634068307421234527095591085036542160387367691944010" \
	"975408030387045757333117117106642362746817079296595077266231" \
	"539797438547718217585348401525110815431508041372063435381246" \
	"031899285980848878201413896797811316833560553995491439595681" \
	"923196663368947274989655741723930512233824969005097885029422" \
	"357501820683035694227690760029389720555091326855256135152515" \
	"991629667196092383555620493513052376816166150463402645212712" \
	"906520400777603115930223645552970514327317217278507643140717" \
	"182239925721890342870110303375808665304693222547743946076755" \
	"692015880794045769310816721195424546206360150602831845794754" \
	"107728490276051145716712025134135902681643628483224712234443" \
	"063152270612970654343583032461561909892954923011301907408278" \
	"407275948095435658167567889516277464704601392558782479050096" \
	"372379916668232181458496952539316561733622359194587739442387" \
	"588748382930523021381163994808898807073006256512121958841602" \
	"953834143318421508854501873168004451093624401020578718864158" \
	"163753449732176772997318191567270326934788485419221293796231" \
	"298858119919950554081790900335797631743704599354917110833385" \
	"431529946758628104742509312229561143992532198765988099227018" \
	"878514141238218580104368183434902069663104345510818435635700" \
	"414562606631845260797394601892129923774496571513678144171246" \
	"566200747779503333919046242725933701038577717836624878658828" \
	"401949953074213765717982884761623247802534761098061468371860" \
	"040646573304592111813415676017629612099762583556889291591502" \
	"037421011749177580329597161049249542989001421868003098607452" \
	"447624875123240558047810930160637311667163115623275956058331" \
	"757826897673135754479768852033554041590179245281724637243354" \
	"117485618855501973830027844010664951610244096398130144699577" \
	"573289088165216285450511045687327534575629779122305699816415" \
	"839649332244222046600972555138062951807105050363438375687919" \
	"992990152747901390216324885281609322926002453655984740862104" \
	"800118089506795694008885846789831227726569500145265086949437" \
	"988620853249497033861484487843582927839639572167539512092182" \
	"766072426433981477788791769424931914440282201493136920334470" \
	"631849934882150702051061806916010852413506785949573428717190" \
	"652565822614387096957090183695781683632118089627541885999806" \
	"415805712006844406519039722769587152345216028824048408671591" \
	"996748454264778680080651811924705017452522895119289297677596" \
	"399980344578097690385847397582483006778980686294815929593822" \
	"079423101338051192607368480059375406606683609868638996461314" \
	"025218799102080893035335496954072017203857904998271542125754" \
	"657205938132168124359996375519697778439582860828566963816699" \
	"746486300437187004803313727795498535830803859623878348202161" \
	"779205893343935527641213944242785604444240371520170466676321" \
	"928607939131173535257360320584979666827307689152405952207350" \
	"699524761489708601133045296730863484253942716135384938226198" \
	"568386927589550770858283642852352203645776295407127244203589" \
	"644784502503420416982059860877101382070973271189722892984326" \
	"410970961430713847387443991297677367803419085937220978538980" \
	"441628473685496662320890458789716737710737534633335780887058" \
	"229693686098443784495418741977154423684238599047296839730434" \
	"085083647717961771343882046771178192554297991147688856565555" \
	"090757465961600177144271662429462033026661376496701392139827" \
	"805716034927247277392566480664873339284583953871193119773255" \
	"759149930467692321302473790340664010828943491220928942540701" \
	"809650948952021861576751017761266006860909899638475036335626" \
	"074637477900802957227409245252385131499626970250373571243577" \
	"269099399542105493137222898746523529168177015284588584593530" \
	"535422847893997078481093842801730870845975425823397648701679" \
	"269953351511574749765536142563534666242970982516216461548676" \
	"091848844824472900050116980087609760065613615848853809078135" \
	"539024293905056113075795105768447478038151819261968647482323" \
	"595339889631890319991305740056522600422147869065281727002061" \
	"985563827492146406348739661318028756838105073748842194458561" \
	"389348774902798361516170139490919233843823391129815389669442" \
	"389886962769612654436729345525800917085158998450443138829807" \
	"226401369403848923672976087487989192421758085312025736674941" \
	"465891203009498155699006389389940020187366385171748881799189" \
	"859057487614182907767561954322147267560355277722058958977274" \
	"007000776522440864120260304346026144122668525606742093385842" \
	"877851187985354298444881951517964028828337147992244078392289" \
	"033891527938598539476575275618308528833647822827687596807355" \
	"015006465320113872907922736279079949111368490254190424134142" \
	"526305891930318351790395305770103209586168680236305757463917" \
	"504215452060579791599906033628162787284365361089361880425156" \
	"013152471178783132851787237084697582323149702243584748375544" \
	"864216759785482917668710098191387194325613366050379525378498" \
	"060821148303033711198142478670004863329544955847264359312410" \
	"124051026217318607753467506730576567256247484381058493859200" \
	"638791430791009825392526429942820641023745462165966092444179" \
	"625962380866337824952291146979992952948121844170079781600828" \
	"3296406611"