2010-02-09 99 views
19

在python中模擬單精度浮點的最好方法是什麼? (或者其他浮點格式?)只要使用ctypes?在Python中模擬單精度浮點的正確方法?

+2

你是什麼意思的「模仿」?從二進制blob讀取浮點數?以單精度執行數學並獲得與另一種語言相同的結果? (如果是後者,請注意x86上C語言中的「浮點」數學實際上是以80位計算的,而在存儲時則減少到32位。) – 2010-02-10 01:29:21

回答

3

如果您的應用程序適合陣列/矩陣,可以使用numpy的與float32

11

如果numpy(其他答案的指教)不適用於你(例如,因爲你的環境是不允許任意的第三方擴展),Python標準庫中的array模塊也很好 - 類型代碼'f'爲您提供了32位浮點數。除了那些和(通常的)雙精度浮點數之外,「其他浮點格式」沒有太多 - 你有什麼想法? (例如gmpy爲GMP提供了對更長,任意位大小的浮點數提供適度支持 - 但它確實適度,例如沒有trig函數)。

6

如何從標準庫ctypes.c_float?

1

可以使用Python的struct模塊將64位浮點數截斷爲32位浮點數的精度。

例如:

>>> x = 1.1122334455667788 
>>> x 
1.1122334455667788 
>>> struct.unpack('f', struct.pack('f', x))[0] 
1.1122334003448486 

做算術只有32位浮點,則需要該截斷操作適用於每一個算術運算的結果。