2010-02-09 7 views
19

¿Cuál es la mejor manera de emular el punto flotante de precisión simple en python? (¿O en otros formatos de coma flotante para el caso?) ¿Solo usas ctypes?¿Manera correcta de emular punto flotante de precisión simple en python?

+2

¿Qué quiere decir con "emular"? ¿Lees flotantes de blobs binarios? ¿Ejecuta las matemáticas con precisión simple y obtiene los mismos resultados que otro idioma? (Si es este último, tenga en cuenta que las matemáticas "flotantes" en C en x86 se evalúan en realidad en 80 bits y se reducen a 32 bits cuando se almacenan). –

Respuesta

3

Si su aplicación se adapte a matrices/matrices, puede utilizar numpy con float32

11

Si numpy (la excelente sugerencia de otras respuestas) no es aplicable para usted (por ejemplo, porque estás en un ambiente que no permite extensiones arbitrarias de terceros), el módulo array en la biblioteca estándar de Python también es correcto: el código de tipo 'f' le ofrece flotantes de 32 bits. Además de esos y los flotadores de doble precisión (habituales), no hay mucho para "otros formatos de punto flotante": ¿qué tienes en mente? (por ejemplo, gmpy ofrece el soporte modesto de GMP para flotadores con tamaños de bits arbitrarios mucho más largos, pero es realmente modesto, por ejemplo, no tiene funciones trigonométricas).

6

¿qué tal ctypes.c_float de la biblioteca estándar?

1

Es posible utilizar el módulo struct de Python para truncar un flotador de 64 bits con la precisión de un flotador de 32 bits.

Por ejemplo:

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

Para hacer operaciones aritméticas con flotadores única de 32 bits, lo que se necesita para aplicar esta operación de truncamiento al resultado de cada operación aritmética.

Cuestiones relacionadas