2012-11-18 27 views
8

Varsayılan kayan nokta sayıları doğruluğu başka bir yere nasıl dönüştürülebilir, belki de özel? Buna ihtiyacım var, çünkü bazı hesaplamalar yapıyorum ve varsayılan float noktası doğruluğunu arttırmam gerektiğini görüyorum.kayan nokta sayılarını artırma doğruluk

+1

Python ve numpy, varsayılan olarak çift duyarlıklı kayan nokta kullanır. Yetersiz "doğruluğa" sahip olduğuna inanmanızı sağlayan şey nedir? – talonmies

+1

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

+1

'a baktık Hesaplamalarınız için 'decimal' kullanabilirsiniz, ancak daha sonra 'numpy' performans avantajını kaybedersiniz. Bildiğim kadarıyla bu trajeden kurtulamazsınız - bir işlemcinin doğal olarak çalışabileceği en kesin veri türü, "numpy" nin kullandığıdır. – millimoose

cevap

7

Son zamanlarda bu sorunla başa çıkmak zorunda kaldım ve mpmath mükemmeldi. BSD lisansı altında saf python. yüklüyse

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

Çok fazla yavaş ve (a C-coded Python extension modules that support fast multiple-precision arithmetic) gmpy kütüphane artırabilen değildir.

+0

scipy.integrate.odeint kullanarak "TypeError: dizi gerekli türden güvenli bir şekilde alınamaz" "(Scipy.integrate.odeint herşeyi yüzer şekilde dönüştürür gibi görünüyor. – user983302

+1

Ama kendi başına bir ode çözücü var - [odefun] (http : //mpmath.googlecode.com/svn/trunk/doc/build/calculus/odes.html) Tamam, bu çözüm olsun. – user983302

+0

[Sınırsızlık] ile ilgili güncel metin (http://mpmath.org/doc/ current/technical.html # display-of-number): "Mpmath mantis ve üs için hem de rasgele kesinlik tamsayıları kullanır, bu nedenle bilgisayar belleği tarafından izin verilen büyüklükte büyüklükte olabilir. son derece büyük sayılar. " –

2

Daha fazla doğruluk istiyorsanız, bunun yerine bigfloat paketini kullanmanızı öneririm (çünkü bu, bunun için üretildiğinden). Alternatif olarak, Decimal sınıfına da bakabilirsiniz.

+0

Birbirinizle başa çıkmak için scipy.integrate ve bigfloat yapmak mümkün mü? Şu anda "TypeError: dizi güvenli bir şekilde türüne dönüştürülemez" BigFloat argümanlarını scipy.integrate.odeint adresine iletirken – user983302

+0

@ user983302 Belki de [this] (http://stackoverflow.com/questions/7770870/numpy-array-with -dtype-decimal) size yardımcı olacaktır. – arshajii

İlgili konular