Точность Python / numpy с плавающей точкой

Позволять'скажем, у меня есть некоторые 32-битные и 64-битные значения с плавающей запятой:

>>> 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)

Я хочу сериализовать эти значения в текст без потери точности (или, по крайней мере, очень близко к тому, чтобы не потерять точность). Я думаю, что канонический способ сделать это с:repr

>>> 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']

Но я хочу сделать представление как можно более компактным, чтобы минимизировать размер файла, поэтому было бы неплохо, если бы значения типа 2.4 были сериализованы без лишних десятичных знаков. Да, я знаю это'с их фактическим представлением с плавающей запятой, но%g кажется, может позаботиться об этом:

>>> ('%.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 '

Мой вопрос: это безопасно использовать%g в этом случае? Являются.7 а также.16 правильные значения, чтобы точность победилабыть потерянным?

Ответы на вопрос(3)

Ваш ответ на вопрос