2**HUGENUMBER Why not optimise it?

Mike C. Fletcher mcfletch at rogers.com
Wed May 22 16:29:21 EDT 2002


Just realised, you can even do the same optimisations when you're using 
any power-of-two number:

emap = {
	2:1,
	4:2,
	8:3,
	16:4,
	32:5,
	64:6,
	128:7,
	256:8,
	512:9,
	1024:10,
	2048:11,
	4096:12,
	8192:13,
	16384:14,
	32768:15,
	65536:16,
	131072:17,
	262144:18,
	524288:19,
	1048576:20,
	2097152:21,
	4194304:22,
	8388608:23,
	16777216:24,
	33554432:25,
	67108864:26,
	134217728:27,
	268435456:28,
	536870912:29,
	1073741824:30,
} 


def dumbpow( number, exponent ):
	# is number 1?
	if abs(number) == 1 or exponent <= 0:
		return number**exponent
	# is number a power of 2?
	size = emap.get(abs(number))
	if size:
		size = 1L << (size*exponent)
		if exponent %2 and number < 0:
			return -size
		else:
			return size
	else:
		return number ** exponent

Sure, it's an extra map call, but oh well, pointless "optimisation" is 
fun :) .

Enjoy,
Mike

Mike C. Fletcher wrote:
...
>     "What is the integer/long value of 2 raised to the power of 10000000?"
...






More information about the Python-list mailing list