5

これは、フロートの異なる精度間のキャストがどのように機能するかについての私の理解の誤りによるものだと確信していますが、32 ビット表現と 64 ビット表現で値が真の値よりも 3 小さい値としてキャストされる理由を誰かが説明できますか?

>>> a = np.array([83734315])
>>> a.astype('f')
array([ 83734312.], dtype=float32)
>>> a.astype('float64')
array([ 83734315.])
4

2 に答える 2

4

32 ビット浮動小数点数は、仮数部の約 7 桁を正確に表すことができます。あなたの数はもっと必要なので、正確に表すことはできません。

発生メカニズムは次のとおりです。

32 ビットの float には 24 ビットの仮数があります。数値を正確に表すには 27 ビットが必要なため、最後の 3 ビットが切り捨てられます (ゼロに設定されます)。数字の最下位 3 ビットは0112です。これらは0002に設定されています。0112310であることを確認します。

于 2013-11-08T15:35:39.687 に答える
3

Afloat32の仮数精度は 24 ビットのみで、およそ 7 桁です (log10(2**24) = 7.22)。正確に 8 桁の数値を格納することを期待していますが、これは一般的に不可能です。

于 2013-11-08T15:35:46.313 に答える