cms.ft.bit_reverse_compare のソースコード

import sys
import time


val10 = 0b1100011011000110110001101100011110001101100011011000110110001101
niter = 100000


[ドキュメント] def bit_reverse(val): ret = 0 while 1: v0 = val & 0b001 ret = ret | v0 val = val >> 1 if val == 0: break else: ret = ret << 1 return ret
[ドキュメント] def bit_reverse_nobitop(val): ret = 0 while 1: v0 = val % 2 ret = ret + v0 val = val // 2 if val == 0: break else: ret = ret * 2 return ret
[ドキュメント] def bit_reverse_nobitop2(val): ret = 0 while 1: v0 = val % 2 ret += v0 val //= 2 if val == 0: break else: ret *= 2 return ret
[ドキュメント] def main(): global val10, niter if len(sys.argv) > 1: val10 = int(sys.argv[1], 2) if len(sys.argv) > 2: niter = int(sys.argv[2]) print("") print("Base 10 input: ", val10) print("Base 2: {:b}".format(val10)) print("") print("by bitwise operation") vrev = bit_reverse(val10) print("reversed in Base 10 =", vrev) print(" in Base 2 = {:b}".format(vrev)) print("without bitwise operation") vrev = bit_reverse_nobitop(val10) print("reversed in Base 10 =", vrev) print(" in Base 2 = {:b}".format(vrev)) print("") print("Time for {} iterations".format(niter)) st = time.time() for _ in range(niter): bit_reverse(val10) et = time.time() print("by bitwise operation : {} s".format(et - st)) st = time.time() [bit_reverse(val10) for _ in range(niter)] et = time.time() print("by bitwise operation (list incl): {} s".format(et - st)) st = time.time() for _ in range(niter): bit_reverse_nobitop(val10) et = time.time() print("without bitwise operation: {} s".format(et - st)) st = time.time() for _ in range(niter): bit_reverse_nobitop2(val10) et = time.time() print("without bitwise operation #2: {} s".format(et - st)) print("")
if __name__ == "__main__": main()