summaryrefslogtreecommitdiff
path: root/bench/bigfactorial.myr
blob: cbaab6cbffeb77a28c0a2b69104ef350afc27bae (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
use std
use testr

const main = {
	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)}],
	][:])
}

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
}