在Python程序,我有這兩個值:轉換雙浮動在Python
v1 = 0.00582811585976
v2 = 0.00582811608911
我假說是V1是一個64位的浮點值,V2爲V1轉換爲32位浮點值。我怎樣才能驗證這個?
詳細信息:
第一個值來自硬件板,它以64位精度進行計算。該板將該值發送到PC,但它也應將該值轉換爲32位精度,並將該值發送給另一個板,然後將該板發送到PC。我只是想驗證這是真的發生,我所有的都是兩個大數組。
在Python程序,我有這兩個值:轉換雙浮動在Python
v1 = 0.00582811585976
v2 = 0.00582811608911
我假說是V1是一個64位的浮點值,V2爲V1轉換爲32位浮點值。我怎樣才能驗證這個?
詳細信息:
第一個值來自硬件板,它以64位精度進行計算。該板將該值發送到PC,但它也應將該值轉換爲32位精度,並將該值發送給另一個板,然後將該板發送到PC。我只是想驗證這是真的發生,我所有的都是兩個大數組。
您可以使用struct module用數值表示玩:
import struct
>>> struct.unpack("f", struct.pack("f", 0.00582811585976))
(0.005828116089105606,)
它看起來似是而非:
>>> 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
非常好,簡潔。 – CadentOrange
@compie:'np.float32(v1)== np.float32(v2)'或'struct.pack(「f」,v1)== struct.pack(「f」,v2)== b'\ xc8 \ xf9 \ xbe \ x3b'' – jfs
我認爲這兩個32位浮點數是完全相等的(二進制)......但顯然他們不是,v1發生的事情比簡單的浮點運算要多。 – compie
哪裏這些值來自!?有一點上下文會有所幫助。 – StoryTeller