2012-11-18 16 views
8

Wie wird die Standard-Gleitkommazahlgenauigkeit auf eine andere, vielleicht benutzerdefinierte, umgeschaltet? Ich brauche das, weil ich einige Berechnungen mache und ich sehe, dass ich die Standardschwimmpunktgenauigkeit erhöhen sollte.Erhöhung der Genauigkeit der Gleitkommazahlen

+1

Python und numpy verwenden standardmäßig einen Gleitkommawert mit doppelter Genauigkeit. Was lässt Sie glauben, dass die Genauigkeit ungenügend ist? – talonmies

+1

Haben Sie sich http://docs.python.org/2/library/decimal.html angesehen –

+1

Sie können Dezimalzahlen für Ihre Berechnungen verwenden, aber dann verlieren Sie den Leistungsvorteil von 'numpy'. Soweit ich weiß, können Sie diesen Kompromiss nicht umgehen - der genaueste Datentyp, mit dem ein Prozessor nativ arbeiten kann, ist der, der "numpy" verwendet. – millimoose

Antwort

7

Ich hatte vor kurzem mit diesem Problem zu tun haben und die mpmath war perfekt. Es ist reines Python, unter einer BSD-Lizenz.

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

Es ist nicht zu viel langsamer, und es kann die gmpy Bibliothek nutzen, wenn installiert (eine C-coded Python extension modules that support fast multiple-precision arithmetic).

+0

Mit scipy.integrate.odeint bekomme ich "TypeError: Array kann nicht sicher in den erforderlichen Typ umgewandelt werden" = (Es scheint, dass scipy.integrate.odeint alles in float konvertiert. – user983302

+1

Aber es hat seinen eigenen ode solver - [odefun] (http : //mpmath.googlecode.com/svn/trunk/doc/build/calculus/odes.html) OK, lass das die Lösung sein – user983302

+0

Aktualisierter Text über [unlimitedness] (http://mpmath.org/doc/ current/technical.html # Darstellung der Zahlen): "Mpmath verwendet willkürliche Ganzzahlen für die Mantisse und den Exponenten, so dass die Zahlen so groß sein können, wie es der Speicher des Computers zuläßt extrem große Zahlen. " –

2

Wenn Sie eine höhere Genauigkeit wünschen, rate ich Ihnen stattdessen, das bigfloat Paket zu verwenden (da dies ist, wofür es gemacht ist). Alternativ können Sie auch in die Decimal Klasse schauen.

+0

Ist es möglich, dass scipy.integrate und bigfloat miteinander umgehen? Momentan bekomme ich "TypeError: Array kann nicht sicher in den erforderlichen Typ umgewandelt werden", wenn BigFloat Argumente an scipy.integrate.odeint übergeben werden – user983302

+0

@ user983302 Vielleicht [dies] (http://stackoverflow.com/questions/7770870/numpy-array-with -dtype-dezimal) wird Ihnen helfen. – arshajii

Verwandte Themen