2017-06-07 25 views
4

我已經在兩臺不同的機器上安裝了Python3.6,發行版Anaconda。我不能發誓我使用了相同的安裝程序文件,儘管我認爲我是這樣做的。我看到同樣的,當我嘗試了Python,巨蟒和numpy的版本: In the server machine In the local machinenumpy.exponential稍有不同的行爲

我是越來越小的數值差異。經過一些調試後,我成功地將問題簡化爲調用numpy.exp。只需運行代碼

import numpy as np 

x = -0.1559828702879514361612223 
y = np.exp(x) 
print("The exponential of %0.25f is %0.25f" % (x, y)) 

我得到

The exponential of -0.1559828702879514361612223 is 0.8555738459791129013609634 
第一( '服務器')機

The exponential of -0.1559828702879514361612223 is 0.8555738459791127903386609 

在第二( '本地')的機器。

我知道浮點數沒有25位小數精度,但這些差異在我的代碼中傳播,發生在小數點後12位左右。

什麼可能是不同行爲的原因?

+1

對於它的價值,我得到與你的「服務器」相同的輸出,同時擁有更新的numpy和更老的python。也許與處理器有關? –

+1

儘量避免將代碼作爲圖片添加進去,因爲它使搜索引擎無法使用 –

+0

@IgnacioVergaraKausel Thx。也許你是對的,我認爲結果是獨立於處理器的,但也許不是。可能出於無知,如果是這種情況,我發現它不安:我更換我的機器,然後我的號碼變化?! – zeycus

回答

1

這不是關於NumPy,而是關於浮點操作的結果是系統相關的。如果不使用NumPy,您可以使用math.exp代替。一個簡單的例子是

math.exp(2**(-53)) - 1 

這正好返回0對我的另一臺計算機之一,2.22e-16。這兩個都是同樣錯誤的,因爲math.expm1(2**(-53)) = 1.11e-16的計算表明(順便說一句,這就是爲什麼函數expm1存在)。

從某種意義上說,CPU依賴性是否很好,清楚地表明兩個系統之間不同的數字是毫無價值的。需要關注的是安排計算以減少loss of significance

+0

謝謝@alex,你的例子很有啓發性。我完全不知道這樣的CPU依賴性,但我從現在開始。 – zeycus

相關問題