2013-01-22 63 views
1

我正在實現從RGB到Yxy顏色的轉換,僞代碼指導我對兩個浮點型變量執行XOR(^)操作。我如何在Python中做到這一點?我得到這個錯誤:python中浮點數之間的XOR

不支持的操作類型爲^:「浮動」和「浮動」

看看這個僞代碼:http://www.easyrgb.com/index.php?X=MATH&H=02#text2

+2

你知道什麼XOR應該實現語義做了什麼?請在您的帖子中鏈接或包含指南。 – phant0m

+4

你可以顯示僞代碼嗎?也許它不是XOR,而是指數(在某些語言中是'^'字符)? –

+0

也許有另外一種方法來做你所需要的,除了XOR –

回答

-1

您只能將位智能運算符應用於整數。所以首先將浮點數轉換爲整數。

+0

這將導致丟失信息(並從異或結果中得到錯誤的結果),因爲int上的浮點數始終是整數部分 –

+0

@SamueleMattiuzzo如果這就是要點,只需使用'round(數字,數字)' – whatyouhide

+0

@ whatyouhide,這就是你將得到另一個浮點數的地方,不適用於再次異或 –

4

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