1

RGB から Yxy カラーへの変換を実装しています。疑似コードは、2 つの float 変数で XOR (^) 演算を実行するようにガイドします。Pythonでこれを行うにはどうすればよいですか? 次のエラーが表示されます。

^ のサポートされていないオペランド タイプ: 'float' および 'float'

この疑似コードを見てみましょう: http://www.easyrgb.com/index.php?X=MATH&H=02#text2 .

4

3 に答える 3

4

浮動小数点数を 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

于 2013-01-22T15:28:01.067 に答える
0

ビット単位の演算子は整数にのみ適用できます。したがって、最初に浮動小数点数を整数に変換します。

于 2013-01-22T14:39:07.103 に答える