我正在實現從RGB到Yxy顏色的轉換,僞代碼指導我對兩個浮點型變量執行XOR(^)操作。我如何在Python中做到這一點?我得到這個錯誤:python中浮點數之間的XOR
不支持的操作類型爲^:「浮動」和「浮動」
看看這個僞代碼:http://www.easyrgb.com/index.php?X=MATH&H=02#text2。
我正在實現從RGB到Yxy顏色的轉換,僞代碼指導我對兩個浮點型變量執行XOR(^)操作。我如何在Python中做到這一點?我得到這個錯誤:python中浮點數之間的XOR
不支持的操作類型爲^:「浮動」和「浮動」
看看這個僞代碼:http://www.easyrgb.com/index.php?X=MATH&H=02#text2。
您只能將位智能運算符應用於整數。所以首先將浮點數轉換爲整數。
這將導致丟失信息(並從異或結果中得到錯誤的結果),因爲int上的浮點數始終是整數部分 –
@SamueleMattiuzzo如果這就是要點,只需使用'round(數字,數字)' – whatyouhide
@ whatyouhide,這就是你將得到另一個浮點數的地方,不適用於再次異或 –
xoring浮點數沒有內置的支持。相反,你必須使用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
注意此示例假設實現一個,即浮點數是64位浮點數,作爲原生的Python
我應該有支持在解決這個問題之前,先看看你的僞代碼。在僞代碼插入符號^
是權力,而不是XOR和蟒蛇養號碼功率(含浮動)通過**
或math.pow
你知道什麼XOR應該實現語義做了什麼?請在您的帖子中鏈接或包含指南。 – phant0m
你可以顯示僞代碼嗎?也許它不是XOR,而是指數(在某些語言中是'^'字符)? –
也許有另外一種方法來做你所需要的,除了XOR –