Python: Division von Gleitkomma- und komplexen Zahlen

9 August, 2012

Eric Lippmann
Eric Lippmann
CTO

von | Aug. 9, 2012

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:

Events

Professional Services

Web Services

0 Kommentare

Einen Kommentar abschicken

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

Wie hat Dir unser Artikel gefallen?