Seite wählen

Python: Division von Gleitkomma- und komplexen Zahlen

von | Aug 9, 2012 | Development

Der Divisionsoperator (/) in Python 2.x hat, abhängig von seinen Argumenten, unterschiedliche Bedeutung: Teilt man (Long) Integer, erhält man das abgerundete Ergebnis, bei Gleitkomma- (Float) oder komplexen Zahlen eine genügend präzise Annäherung. Erwartet man beispielsweise Float, verwendet aber selbst oder durch Eingabe Integer, kann das zu unerwartenden Verhalten führen:

[elippmann@ws-elippmann ~]$ python
Python 2.7.3 (default, Jul 24 2012, 10:05:38)
[GCC 4.7.0 20120507 (Red Hat 4.7.0-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a, b = 5, 10
>>> a / b

Wenn als Eingabe verschiedene numerische Datentypen erlaubt sind, müssen wir bei der Berechnung sicherstellen, dass das Ergebnis eine Gleitkommazahl ist:

>>> float(a) / b
0.5

Komplexe Zahlen, können mit dieser Methode aber nicht verarbeitet werden:

>>> c = 4j
>>> float(c) / b
Traceback (most recent call last):
File "", line 1, in
TypeError: can't convert complex to float

Um Vorzeichen beizubehalten und alle numerischen Datentypen verabeiten zu können, ist nur die Multiplikation mit 1.0 richtig:

>>> c * 1.0 / b
0.4j

In Python 3 ist das alles nicht mehr nötig, da Ergebnisse automatisch Gleitkommazahlen sind. Ab Python 2.2 kann dieses Verhalten aktiviert werden, indem das entsprechende Feature aus dem __future__-Modul aktiviert wird:

>>> from __future__ import division
>>> a / b
0.5
>>> c / b
0.4j

Zum Abschluss noch ein Hinweis: Wer wirklich Integer-Division verwenden möchte, sollte auch den entsprechneden Operator benutzen, ehe nach Konvertierung des Code zu Python 3, böse Überraschungen warten:

>>> a // b
>>> float(a) // b
0.0
>>> c // b
0j

Zum Weiterlesen:

Eric Lippmann
Eric Lippmann
CTO

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema Development

Mein PHP-Trainingsprojekt

PHP Schulung Vor kurzem haben wir begonnen, eine neue Programmiersprache zu lernen – PHP. In der ersten Woche haben wir mit den Grundlagen wie Variablen, Arrays, Schleifen begonnen und uns schrittweise zu komplizierterer Syntax wie Funktionen, Objekten und Klassen...

check_prometheus ist jetzt öffentlich verfügbar!

Monitoring ist komplex, das wissen wir hier bei NETWAYS leider zu gut. Deswegen laufen in der Infrastruktur auch mal gerne mehrere Tools für die Überwachung. Zwei gern gesehene Kandidaten sind dabei Icinga und Prometheus. Icinga und Prometheus erfüllen...