Selbst die grundlegendsten mathematischen Operationen können manchmal zu fehlerhaften Ergebnissen führen. Dies geschieht aufgrund von Einschränkungen beim Speichern des genauen Werts einiger Zahlen. Sie können diese Einschränkungen überwinden, indem Sie das Dezimalmodul in Python verwenden. Ebenso weder die Mathematik noch die cmath Das Modul, das wir in unserem letzten Lernprogramm kennen gelernt haben, kann uns bei der Berechnung von Brüchen helfen. Genau das tut das Fraktionen-Modul in Python.
In diesem Lernprogramm erfahren Sie mehr über diese beiden Module und die verschiedenen Funktionen, die sie zur Verfügung stellen.
Sie fragen sich wahrscheinlich, warum wir ein Modul benötigen, um die Grundrechenarten mit Dezimalzahlen auszuführen, wenn wir dasselbe bereits mit Floats machen können.
Bevor ich diese Frage beantworte, möchte ich, dass Sie den Ausgabewert schätzen, wenn Sie tippen 0,1 + 0,2
in der Python-Konsole. Wenn Sie vermuteten, dass die Ausgabe 0,3 sein sollte, werden Sie überrascht sein, wenn Sie das tatsächliche Ergebnis überprüfen (0,30000000000000004). Sie können auch eine andere Berechnung versuchen 0,05 + 0,1
und Sie erhalten 0,15000000000000002.
Um zu verstehen, was hier vor sich geht, versuchen Sie zu repräsentieren 1/3
in dezimaler Form, und Sie werden feststellen, dass die Zahl in der Basis 10 tatsächlich nicht endet. In ähnlicher Weise sind einige Zahlen wie 0,1 oder 1/10 in der Basis 2 nicht abgeschlossen. Da diese Zahlen noch immer irgendwie dargestellt werden müssen, sind einige der Zahlen unvollständig Annäherungen werden während des Speicherns vorgenommen, was zu Fehlern führt.
Die Zahl 0.30000000000000004 liegt tatsächlich sehr nahe bei 0,3, so dass wir mit dieser Annäherung meistens davon kommen können. Leider wird diese Annäherung nicht abschneiden, wenn Sie einen Satellitenstart simulieren oder mit Geld umgehen. Ein weiteres Problem bei diesen Annäherungen ist, dass sich die Fehler immer weiter aufstauen.
Um genaue Ergebnisse zu erhalten, wie wir sie bei Berechnungen von Hand gewohnt sind, benötigen wir etwas, das schnelle, richtig gerundete, dezimale Fließkomma-Arithmetik und das unterstützt Dezimal Modul macht genau das.
Bevor Sie das Modul verwenden, müssen Sie es zuerst importieren. Danach können Sie Dezimalzahlen aus Ganzzahlen, Strings, Floats oder Tupeln erstellen. Wenn die Dezimalzahl aus einer Ganzzahl oder einem Float gebildet wird, erfolgt eine genaue Konvertierung des Werts dieser Zahl. Sehen Sie sich die Beispiele unten an, um zu verstehen, was ich meine:
aus dezimalem Import dezimal dezimal (121) # gibt dezimal ('121') dezimal (0,05) # ergibt dezimal ('0.05000000000000000277555756') dezimal ('0,05') # ergibt dezimal ('0,05') dezimal (', 0,05') 3, 2, 4), -3)) # gibt Decimal ('8.324') Decimal ((1, (8, 3, 2, 4), -1)) # gibt Decimal ('- 832.4') zurück
Wie Sie sehen können, ist der Wert von Dezimalzahl (0,05)
ist etwas anders als Dezimalzahl ('0,05')
. Das bedeutet, wenn Sie 0,05 und 0,1 addieren, sollten Sie verwenden decimal.Decimal ('0.05')
und dezimal.Dezimal ('0,1')
die Dezimalzahlen konstruieren.
vom Dezimalimport Dezimal Dezimal ('0,05') + Dezimal ('0,1') # gibt Dezimal ('0,15') Dezimal (0,05) + Dezimal (0,1) # gibt Dezimal zurück ('0,150000000000000000083267676868')
Da Sie nun verschiedene Vorgänge für Dezimalzahlen ausführen können, möchten Sie möglicherweise die Genauigkeit oder Rundung dieser Vorgänge steuern. Dies kann mit der getcontext ()
Funktion. Mit dieser Funktion können Sie unter anderem den Wert der Genauigkeits- und Rundungsoptionen ermitteln und einstellen.
Bitte beachten Sie, dass sowohl die Rundung als auch die Präzision nur während arithmetischer Operationen und nicht während der Erstellung der Dezimalzahlen selbst ins Spiel kommen.
dezimal aus dezimal importieren import dezimal, getcontext decimal (1) / decimal (13) # gibt dezimal zurück ('0.07692307692307692307692307692') getcontext () (7) # gibt decimal zurück ('0.1428571429'). Getcontext (). Rounding = decimal.ROUND_DOWN decimal (1) / decimal (7) # gibt Dezimal zurück ('0.1428571428')
Sie können auch einige der mathematischen Funktionen wie verwenden sqrt ()
, exp ()
, und Log()
mit Dezimalzahlen. Hier einige Beispiele:
dezimal aus dezimal importieren import dezimal, getcontext decimal (2) .sqrt () # gibt dezimal zurück ('1.414213562373095048801688724') getcontext (). prec = 4 decimal ('2'). sqrt () # gibt dezimal ('1.414') dezimal zurück ('2000'). Log10 () # gibt Dezimal zurück ('3.301')
In manchen Situationen kann es vorkommen, dass Sie verschiedene Vorgänge für Brüche ausführen müssen oder das Endergebnis ein Bruch sein muss. Das Fraktionen-Modul kann in diesen Fällen eine große Hilfe sein. Damit können Sie eine Fraktion
Instanz aus Zahlen, Floaten, Dezimalzahlen und sogar Zeichenfolgen. Genau wie beim Dezimalmodul gibt es auch bei diesem Modul einige Probleme, wenn es darum geht, Brüche aus Floats zu erzeugen. Hier einige Beispiele:
aus Fraktionen importieren Fraktion aus Dezimalimport Dezimalfraktion (11, 35) # gibt Fraktion (11, 35) Fraktion (10, 18) # gibt Fraktion (5, 9) Fraktion ('8/25') # gibt Fraktion (8, 25) Bruch (1,13) # gibt Bruch zurück (1272266894732165, 1125899906842624) Bruch ('1.13') # gibt Bruch (113, 100) Bruch (Dezimal ('1.13')) # liefert Bruch (113, 100)
Sie können auch einfache mathematische Operationen wie Additionen und Subtraktionen von Brüchen wie reguläre Zahlen ausführen.
von Fraktionen importieren Fraktion Fraktion (113, 100) + Fraktion (25, 18) # gibt Fraktion (2267, 900) Fraktion (18, 5) / Fraktion (18, 10) # gibt Fraktion (2, 1) Fraktion (18, 5) * Fraktion (16, 19) # gibt Fraktion (288, 95) Fraktion (18, 5) * Fraktion (15, 36) # gibt Fraktion (3, 2) Fraktion (12, 5) ** Fraktion (12, 10) # gibt 2.8592589556010197 zurück
Das Modul hat auch einige wichtige Methoden wie limit_denominator (max_denominator)
die einen Bruchwert finden wird, der dem angegebenen Bruchteil, dessen Nenner maximal ist, am nächsten kommt max_denominator
. Sie können den Zähler eines bestimmten Bruchteils auch mit dem niedrigsten Begriff zurückgeben Zähler
Eigenschaft und der Nenner mit der Nenner
Eigentum.
aus Fraktionen importieren den Bruchbetrag ('.4159265358979323846') # gibt den Bruchbetrag zurück (157079632679489661923, 5000000000000000000000) den Bruchteil ('3.14159265358979323846') Bruchteil (311, 99) Bruchteil ('3.14159265358979323846'). Limit_denominator (10) # gibt Bruchteil (22, 7) Bruchteil (125, 50) zurück .Numerator # gibt 5 Bruchteil (125, 50) .denominator # gibt 2 zurück
Sie können dieses Modul auch mit verschiedenen Funktionen in verwenden Mathematik Modul zur Berechnung von Brüchen.
math from bractions importieren import Fraction math.sqrt (Fraction (25, 4)) # gibt 2,5 math.sqrt (Fraction (28,3)) # gibt 3.0550504633038935 math.floor (Fraction (3558, 1213)) # gibt 2 Fraction (zurück) math.sin (math.pi / 3)) # gibt Fraction zurück (3900231685776981, 4503599627370496) Fraction (math.sin (math.pi / 3)). limit_denominator (10) # gibt Fraction (6, 7) zurück
Diese beiden Module sollten ausreichen, um gemeinsame Operationen mit Dezimalzahlen und Brüchen durchzuführen. Wie im letzten Abschnitt gezeigt, können Sie diese Module zusammen mit dem math-Modul verwenden, um den Wert aller Arten mathematischer Funktionen in dem gewünschten Format zu berechnen.
Im nächsten Tutorial der Serie erfahren Sie mehr über die zufällig Modul in Python.