# 0~15bitの各bitに対応する10進数定数値配列 r10numArray = [ 0.5, 0.25, 0.125, 0.0625, 0.03125, 0.015625, 0.0078125, 0.00390625, 0.001953125, 0.0009765625, 0.00048828125, 0.000244140625, 0.0001220703125, 0.00006103515625, 0.000030517578125, 0.0000152587890625 ] step = 0.001 fmt = "{:.3f},0.{},{:.08f},0.{},{:.010f},0.{},{:.012f},0.{},{:.014f},0.{},{:.016f}" #0~999 for num in range(0, 1000) : # 表現したい数値※ループの変数で実数値を扱えないようなので… targetNumber = num * step # 精度 8bit, 10bit, 12bit, 14bit, 16bit を纏めておく r2numStrs = [ "", "", "", "", "" ] # 2進数表示用 r10nums = [ 0.0, 0.0, 0.0, 0.0, 0.0 ] # 10進数表示用 # 0~15bitの各bitの数値を足し込んでいく。表現したい数値を越えない場合に足し込んでいる。 r2numStr = "" r10num = 0.0 for pos in range(0,16) : # 表現したい数値以下になる場合ならそのbitに対応する値を足し込む sw = True if r10num + r10numArray[pos] <= targetNumber else False r10num += r10numArray[pos] if sw else 0 r2numStr += "1" if sw else "0" if pos < 8 : r10nums[0] = r10num # 8bit精度の10進数値格納 if pos < 10 : r10nums[1] = r10num # 10bit精度の10進数値格納 if pos < 12 : r10nums[2] = r10num # 12bit精度の10進数値格納 if pos < 14 : r10nums[3] = r10num # 14bit精度の10進数値格納 r10nums[4] = r10num # 16bit精度の10進数値格納 # 各精度に対応する2進数文字列の切り出し r2numStrs[0] = r2numStr[0:8] # 8bitの2進数値格納 r2numStrs[1] = r2numStr[0:10] # 10bitの2進数値格納 r2numStrs[2] = r2numStr[0:12] # 12bitの2進数値格納 r2numStrs[3] = r2numStr[0:14] # 14bitの2進数値格納 r2numStrs[4] = r2numStr[0:16] # 16bitの2進数値格納 # 表現したい数値の各精度の値を出力 print(fmt.format(targetNumber,r2numStrs[0],r10nums[0] ,r2numStrs[1],r10nums[1] ,r2numStrs[2],r10nums[2] ,r2numStrs[3],r10nums[3] ,r2numStrs[4],r10nums[4]) )