RGB から Yxy カラーへの変換を実装しています。疑似コードは、2 つの float 変数で XOR (^) 演算を実行するようにガイドします。Pythonでこれを行うにはどうすればよいですか? 次のエラーが表示されます。
^ のサポートされていないオペランド タイプ: 'float' および 'float'
この疑似コードを見てみましょう: http://www.easyrgb.com/index.php?X=MATH&H=02#text2 .
RGB から Yxy カラーへの変換を実装しています。疑似コードは、2 つの float 変数で XOR (^) 演算を実行するようにガイドします。Pythonでこれを行うにはどうすればよいですか? 次のエラーが表示されます。
^ のサポートされていないオペランド タイプ: 'float' および 'float'
この疑似コードを見てみましょう: http://www.easyrgb.com/index.php?X=MATH&H=02#text2 .
浮動小数点数を xor する組み込みのサポートはありません。代わりに、struct
モジュールを使用して実装する必要があります
>>> from struct import pack, unpack
>>> def xor_float(f1, f2):
f1 = int(''.join(hex(ord(e))[2:] for e in struct.pack('d',f1)),16)
f2 = int(''.join(hex(ord(e))[2:] for e in struct.pack('d',f2)),16)
xor = f1 ^ f2
xor = "{:016x}".format(xor)
xor = ''.join(chr(int(xor[i:i+2],16)) for i in range(0,len(xor),2))
return struct.unpack('d',xor)[0]
>>> xor_float(10.25,10.25)
0.0
>>> xor_float(10.25,0.00)
10.25
注この例では、Python でネイティブにサポートされているように、浮動小数点数が 64 ビット浮動小数点数であると想定しています。
この問題の解決に飛び込む前に、疑似コードを見ておくべきでした。疑似コードのキャレット^
は xor ではなく累乗であり、Python では数値の累乗 (float を含む) は**
orを介して行われます。math.pow
ビット単位の演算子は整数にのみ適用できます。したがって、最初に浮動小数点数を整数に変換します。