Python / numpy precisión de texto en coma flotante

Digamos que tengo algunos valores de punto flotante de 32 bits y 64 bits:

>>> import numpy as np
>>> v32 = np.array([5, 0.1, 2.4, 4.555555555555555, 12345678.92345678635], 
                   dtype=np.float32)
>>> v64 = np.array([5, 0.1, 2.4, 4.555555555555555, 12345678.92345678635], 
                   dtype=np.float64)

Quiero serializar estos valores a texto sin perder precisión (o al menos realmente cerca de no perder precisión). Creo que la forma canónica de hacer esto es conrepr:

>>> map(repr, v32)
['5.0', '0.1', '2.4000001', '4.5555553', '12345679.0']
>>> map(repr, v64)
['5.0', '0.10000000000000001', '2.3999999999999999', '4.5555555555555554', 
 '12345678.923456786']

Pero quiero que la representación sea lo más compacta posible para minimizar el tamaño del archivo, por lo que sería bueno que valores como 2.4 se serializaran sin los decimales adicionales. Sí, sé que esa es su representación de punto flotante real, pero%g Parece poder encargarse de esto:

>>> ('%.7g ' * len(v32)) % tuple(v32)
'5 0.1 2.4 4.555555 1.234568e+07 '
>>> ('%.16g ' * len(v32)) % tuple(v64)
'5 0.1 2.4 4.555555555555555 12345678.92345679 '

Mi pregunta es: ¿es seguro usarlo?%g ¿De este modo? Son.7 y.16 ¿Los valores correctos para que no se pierda la precisión?

Respuestas a la pregunta(3)

Su respuesta a la pregunta