回答
嘛錯誤來了約,因爲你試圖乘
3600**3400
這是一個長與
exp(-3600)
這是一個浮點數。
但無論如何,您收到的錯誤是掩蓋真正的問題。無論如何,看起來exp(-3600)的數字太大了。充其量,蟒蛇數學圖書館是變幻莫測的。
其實exp(-3600)是一個非常小(接近於零)的數字 – 2009-10-06 15:43:29
我相信你的意思是3600 ** 3400是一個數字太大以至於無論如何都適合浮動。順便說一句,math.exp(-3600)== 0.0 – foosion 2009-10-06 15:58:01
嘗試使用對數而不是直接使用數字。由於您的操作都不是加法或減法,因此您可以以對數形式完成所有操作並在最後轉換回來。
您可以嘗試使用Decimal對象。計算速度會比較慢,但對於非常小的數字你不會有問題。
from decimal import Decimal
但是,我不知道Decimal與scipy模塊的交互方式。
這可能與numpy discussion有關。
用這樣大小的數字進行計算,你不能使用普通的64位或更多的浮點數,這是Python的核心運行時支持的。考慮gmpy
(做不獲得SourceForge上的版本,它是億萬過時) - 與,math
,還有一些護理...:
>>> e = gmpy.mpf(math.exp(1))
>>> gmpy.mpz(3600)**3400 * (e**(-3600))/gmpy.fac(3400)
mpf('2.37929475533825366213e-5')
(我有偏見約gmpy
,當然,因爲我起源和仍然參與該項目,但我從來沒有對其浮點數能力強大的聲明...我一直主要用於整數的東西......仍然,它確實做這個計算可能!-)。
EXP(-3600)太斯梅爾,階乘(3400)過大:
In [1]: from scipy import exp
In [2]: exp(-3600)
Out[2]: 0.0
In [3]: from scipy import factorial
In [4]: factorial(3400)
Out[4]: array(1.#INF)
怎麼樣計算它一步一步的解決方法(和它有道理 檢查最小和最大中間結果):
from math import exp
output = 1
smallest = 1e100
biggest = 0
for i,j in izip(xrange(1, 1701), xrange(3400, 1699, -1)):
output = output * 3600 * exp(-3600/3400)/i
output = output * 3600 * exp(-3600/3400)/j
smallest = min(smallest, output)
biggest = max(biggest, output)
print "output: ", output
print "smallest: ", smallest
print "biggest: ", biggest
輸出爲:
output: 2.37929475534e-005
smallest: 2.37929475534e-005
biggest: 1.28724174494e+214
- 1. Python浮動操作
- 2. 浮動操作按鈕顯示太低
- 3. Python浮點操作數錯誤
- 4. WCF異步工作太久
- 5. Lua浮點操作
- 6. JAVA浮點操作
- 7. 持久GPU功能/操作
- 8. GPS正在搜索太久
- 9. 在Python浮點操作中將小數位數限制爲2
- 10. 在NHibernate持久化刪除操作
- 11. Python:獲取和操作(作爲整數)位浮點模式
- 12. C++操作太混亂了?
- 13. FreeBSD以太網操作
- 14. 停止浮點操作
- 15. CPU浮動操作成本
- 16. 無效的浮點操作
- 17. 浮動操作按鈕
- 18. 的數值(浮點)操作
- 19. GCC中的浮點操作
- 20. 製作ModelState持久,但不是太持久
- 21. 浮動操作按鈕庫在Eclipse中
- 22. 在android中的浮點值操作
- 23. 作業操作字符串太長
- 24. Vimeo浮動太陽?
- 25. 太陽能系統模型Python - 列表操作難度
- 26. Python的操作
- 27. python datetime.time操作
- 28. Python swf操作
- 29. Python bitarray操作
- 30. Python樹操作
和你的問題是什麼? – SilentGhost 2009-10-06 14:58:48
發生錯誤。而不是輸出。 – wildfire 2009-10-06 15:01:28
我們知道*錯誤發生*,如果一切正常,您不會在這裏寫信,是嗎? – SilentGhost 2009-10-06 15:01:31