2012-11-18 214 views
8

如何將默認浮點數精度切換到另一個,也許是自定義?我需要這個,因爲我做了一些計算,我發現我應該增加默認的浮點精度。增加浮點數精度

+1

默認情況下,Python和numpy使用雙精度浮點。是什麼讓你相信它沒有足夠的「準確性」? – talonmies

+1

你看過http://docs.python.org/2/library/decimal.html –

+1

你可以使用小數來進行計算,但是你會失去'numpy'的性能優勢。據我所知,你無法擺脫這種折衷 - 處理器本身可以工作的最精確的數據類型就是'numpy'使用的。 – millimoose

回答

7

我最近不得不處理這個問題和mpmath是完美的。這是純粹的Python,在BSD許可下。

Mpmath is a pure-Python library for multiprecision floating-point arithmetic. It provides an extensive set of transcendental functions, unlimited exponent sizes, complex numbers, interval arithmetic, numerical integration and differentiation, root-finding, linear algebra, and much more. Almost any calculation can be performed just as well at 10-digit or 1000-digit precision, and in many cases mpmath implements asymptotically fast algorithms that scale well for extremely high precision work

現在還不算慢得多,它可以安裝,如果充分利用gmpy庫(一個C-coded Python extension modules that support fast multiple-precision arithmetic)。

+0

使用scipy.integrate.odeint我得到「類型錯誤:數組不能安全地轉換爲所需的類型」。=(似乎scipy.integrate.odeint轉換一切上浮 – user983302

+1

但它有它自己的ODE求解 - [odefun](HTTP ://mpmath.googlecode.com/svn/trunk/doc/build/calculus/odes.html)好吧,讓這是解決方案。 – user983302

+0

關於[unlimitedness]的更新文本(http://mpmath.org/doc/ current/technical.html#數字表示法):「Mpmath對尾數和指數都使用任意精度整數,因此數字的大小可能與計算機內存允許的一樣大。非常大的數字「。 –

2

如果你想要更高的精度我反而建議你使用bigfloat包(因爲這是它是製造)。或者,您也可以查看Decimal課程。

+0

是否有可能讓scipy.integrate和bigfloat處理對方?目前,我得到「類型錯誤:數組不能安全地轉換爲所需的類型」時,通BigFloat參數scipy.integrate.odeint – user983302

+0

@ user983302也許[這](http://stackoverflow.com/questions/7770870/numpy-array-with -dtype-decimal)會幫助你。 – arshajii