我在Pandas read_csv函數中遇到了一些浮點問題。在我的調查,我發現這一點:Numpy float64 vs Python float
In [15]: a = 5.9975
In [16]: a
Out[16]: 5.9975
In [17]: np.float64(a)
Out[17]: 5.9974999999999996
爲什麼是Python內置float
和Python中給出不同的結果np.float64
類型?我認爲他們都是C++雙打?
我在Pandas read_csv函數中遇到了一些浮點問題。在我的調查,我發現這一點:Numpy float64 vs Python float
In [15]: a = 5.9975
In [16]: a
Out[16]: 5.9975
In [17]: np.float64(a)
Out[17]: 5.9974999999999996
爲什麼是Python內置float
和Python中給出不同的結果np.float64
類型?我認爲他們都是C++雙打?
>>> numpy.float64(5.9975).hex()
'0x1.7fd70a3d70a3dp+2'
>>> (5.9975).hex()
'0x1.7fd70a3d70a3dp+2'
它們是相同的數字。他們的代表有什麼不同? Python本機類型使用「理性」表示,而NumPy類型使用精確表示。
通過表示,你是指它被打印到屏幕的方式? – mchangun 2014-11-24 06:16:05
通過'__repr __()'方法或其C級等價物,是的。 – 2014-11-24 06:18:01
一個真正的*精確的*表示實際上是5.99749999999999960920149533194489777088165283203125,這是您在計算浮點文字'5.9975'時得到的64位浮點數的精確十進制值。 – 2016-03-17 12:19:20
還要注意,Pandas'read_csv'函數使用了它自己的超快速字符串到float的轉換,它*不是正確舍入的。因此,在輸出一個值並重新讀取它之後,恢復的值最終可能會與原始值不同,爲1或2個ulps。 – 2014-11-24 08:41:59