2012-11-08 90 views
4

在Python程序,我有這兩個值:轉換雙浮動在Python

v1 = 0.00582811585976 
v2 = 0.00582811608911 

假說是V1是一個64位的浮點值,V2爲V1轉換爲32位浮點值。我怎樣才能驗證這個?

詳細信息:
第一個值來自硬件板,它以64位精度進行計算。該板將該值發送到PC,但它也應將該值轉換爲32位精度,並將該值發送給另一個板,然後將該板發送到PC。我只是想驗證這是真的發生,我所有的都是兩個大數組。

+2

哪裏這些值來自!?有一點上下文會有所幫助。 – StoryTeller

回答

9

您可以使用struct module用數值表示玩:

import struct 

>>> struct.unpack("f", struct.pack("f", 0.00582811585976)) 
(0.005828116089105606,) 
6

它看起來似是而非:

>>> v1 = 0.00582811585976 
>>> v2 = 0.00582811608911 
>>> import numpy as np 
>>> np.float32(v1) 
0.0058281161 
>>> float(np.float32(v1)) #convert to 32bit and then back to 64bit 
0.005828116089105606  #This rounds to v2 if you're printing 14 places of precision ... 
>>> '%.14f'%np.float32(v1) 
'0.00582811608911' 
>>> '%.14f'%np.float32(v1) == '%.14f'%v2 
True 
+0

非常好,簡潔。 – CadentOrange

+0

@compie:'np.float32(v1)== np.float32(v2)'或'struct.pack(「f」,v1)== struct.pack(「f」,v2)== b'\ xc8 \ xf9 \ xbe \ x3b'' – jfs

+0

我認爲這兩個32位浮點數是完全相等的(二進制)......但顯然他們不是,v1發生的事情比簡單的浮點運算要多。 – compie