32 ビットの数値と 64 ビットの数値があるとします。
>>> import numpy as np
>>> w = np.float32(2.4)
>>> x = np.float32(4.555555555555555)
>>> y = np.float64(2.4)
>>> z = np.float64(4.555555555555555)
私はそれらを印刷することができます%f
が、余分な不要な小数があります:
>>> '%f %f %f %f' % (w, x, y, z)
'2.400000 4.555555 2.400000 4.555556'
使用できます%g
が、デフォルトの精度が小さいようです:
>>> '%g %g %g %g' % (w, x, y, z)
'2.4 4.55556 2.4 4.55556'
.7
32 ビット値と.15
64ビット値のようなものを使用する必要があると考えていました。
>>> '%.7g %.7g %.15g %.15g' % (w, x, y, z)
'2.4 4.555555 2.4 4.55555555555556'
これはかなりうまく機能しているように見えますが、小数点以下の桁数の精度も使い果たされています (例: 34567.375768)。
要約すると、浮動小数点値をテキストにシリアル化して、32 ビットおよび 64 ビット値の適切な精度を維持しながら不要なスペースを使用しない正しい方法は何ですか?
更新:
出力がどうあるべきかの例:
number float32 float64
5 5 5
0.1 0.1 0.1
2.4 2.4 2.4
4.555555555555555 4.5555553 4.5555555555555554
12345678.92345678635 12345679.0 12345678.923456786
.7/.16 で得られるもの。これは実際には大丈夫に見えます:
>>> 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)
>>> ('%.7g ' * len(v32)) % tuple(v32)
'5 0.1 2.4 4.555555 1.234568e+07 '
>>> ('%.16g ' * len(v64)) % tuple(v64)
'5 0.1 2.4 4.555555555555555 12345678.92345679 '