Umgang mit sehr kleinen Zahlen in Python

8

Ich arbeite derzeit mit sehr kleinen Zahlen in meinem Python-Programm, z.

%Vor%

Eine Lösung besteht darin, mit logarithmischen Werten zu arbeiten, die den Bereich meines Gleitkommawerts erhöhen würden. Das Problem ist, dass ich mit diesen Werten auch ein fft machen muss, und daher ist die Verwendung des logarithmischen Ansatzes nicht verwendbar (und das Decimal -Modul auch nicht zu verwenden). Gibt es einen anderen Weg, um dieses Problem zu lösen?

Bearbeiten: Mein Problem mit dem decimal Modul ist: Wie kann ich mit imaginären Werten umgehen? Ich probierte a = Decimal(1e-26)+Decimal(1e-26*1j) und a = Decimal(1e-26)+Decimal(1e-26)*1j , und beide Wege scheiterten (Fehler auf Anfrage).

    
arc_lupus 07.04.2015, 09:27
quelle

2 Antworten

2

Ziehen Sie das mpmath -Paket in Betracht.

%Vor%

Größtenteils genau und kann komplexe Zahlen verarbeiten. Weitere Details finden Sie in der Dokumentation .

    
metatoaster 07.04.2015 10:02
quelle
1

Während numpy mehr Dezimaltypen (und auch komplexe Versionen) unterstützt, helfen sie nicht:

%Vor%

Der Grund ist hier erklärt : Intern, numpy verwendet 80 Bits, was 63 Bits Mantisse bedeutet, die nur 63/3 = 21 Ziffern unterstützt.

Was Sie brauchen, ist ein echter 128bit Float-Typ wie der von Boost .

Probieren Sie das Modul Boost.Python aus, mit dem Sie auf diesen Typ zugreifen können . Wenn das nicht funktioniert, müssen Sie Ihre eigene Wrapper-Klasse in C ++ schreiben als erklärt hier .

    
Aaron Digulla 07.04.2015 09:49
quelle

Tags und Links