bignum.aes
1 // Check that we get out of gas/arithmetic errors for big numbers. 2 contract BigNum = 3 4 function mul_(a, b, r) = 5 if (b =< 0) r 6 else mul_(a + a, b / 2, if (b mod 2 == 1) (a + r) else r) 7 8 function mul(a, b) = mul_(a, b, 0) 9 10 function pow1_(a, b, r) = 11 if (b =< 0) r 12 else pow1_(mul(a, a), b / 2, if (b mod 2 == 1) mul(a, r) else r) 13 14 function pow1(a, b) = pow1_(a, b, 1) 15 16 function pow2_(a, b, r) = 17 if (b =< 0) r 18 else pow2_(a * a, b / 2, if (b mod 2 == 1) (a * r) else r) 19 20 function pow2(a, b) = pow2_(a, b, 1) 21 22 entrypoint tetr1(a, b) = 23 if (b =< 0) 1 else pow1(a, tetr1(a, b - 1)) 24 25 entrypoint tetr2(a, b) = 26 if (b =< 0) 1 else pow2(a, tetr2(a, b - 1)) 27 28 entrypoint tetr3(a, b) = 29 if (b =< 0) 1 else a ^ tetr3(a, b - 1) 30