2010-02-09 100 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位浮点,则需要该截断操作适用于每一个算术运算的结果。