PEP 240 – Hinzufügen eines rationalen Literals zu Python
- Autor:
- Christopher A. Craig <python-pep at ccraig.org>, Moshe Zadka <moshez at zadka.site.co.il>
- Status:
- Abgelehnt
- Typ:
- Standards Track
- Erstellt:
- 11. März 2001
- Python-Version:
- 2.2
- Post-History:
- 16-Mär-2001
Zusammenfassung
Eine andere PEP schlägt die Hinzufügung eines eingebauten rationalen Typs zu Python vor. Diese PEP schlägt vor, das ddd.ddd-Gleitkommaliteral in Python in eine rationale Zahl zu ändern und die nicht-ganzzahlige Division so zu modifizieren, dass sie diese zurückgibt.
BDFL-Verkündigung
Diese PEP wird abgelehnt. Die im Begründungsabschnitt dargelegten Bedürfnisse wurden bis zu einem gewissen Grad durch die Annahme von PEP 327 für die Dezimalarithmetik erfüllt. Guido bemerkte auch: "Rationale Arithmetik war die Standard-'exakte' Arithmetik in ABC und sie hat sich nicht wie erwartet entwickelt". Siehe die python-dev-Diskussion vom 17. Juni 2005 [1].
Begründung
Rationale Zahlen sind nützlich für exakte und überraschungsfreie Arithmetik. Sie liefern die korrekten Ergebnisse, die den Leuten in verschiedenen Mathematikklassen beigebracht wurden. Wenn der "offensichtliche" nicht-ganzzahlige Typ einer mit vorhersagbarerer Semantik verwendet wird, werden neue Programmierer weniger überrascht sein als bei der Verwendung von Gleitkommazahlen. Wie einige Beiträge auf c.l.py und auf tutor@python.org gezeigt haben, werden die Leute oft von der seltsamen Semantik von Gleitkommazahlen überrascht: Zum Beispiel liefert round(0.98, 2) immer noch 0.97999999999999998.
Vorschlag
Literale, die dem regulären Ausdruck '\d*.\d*' entsprechen, sind rationale Zahlen.
Abwärtskompatibilität
Das einzige abwärtskompatible Problem ist der Typ der oben genannten Literale. Die folgende Migration wird vorgeschlagen
- Das nächste Python nach der Genehmigung wird
from __future__ import rational_literalszulassen, damit alle solchen Literale als rationale Zahlen behandelt werden. - Python 3.0 wird eine standardmäßig aktivierte Warnung für solche Literale enthalten, wenn keine
__future__-Anweisung vorhanden ist. Die Warnmeldung wird Informationen über die__future__-Anweisung enthalten und angeben, dass zur Erzielung von Gleitkommaliteralen diese mit "e0" ergänzt werden sollten. - Python 3.1 wird die Warnung standardmäßig deaktiviert haben. Diese Warnung wird 24 Monate lang bestehen bleiben, danach werden die Literale rationale Zahlen sein und die Warnung wird entfernt.
Häufige Einwände
Rationale sind langsam und speicherintensiv! (Entspannen Sie sich, ich nehme die Floats nicht weg, ich füge nur zwei zusätzliche Zeichen hinzu. 1e0 wird immer noch ein Float sein)
Rationale müssen sich als Dezimal-Float präsentieren, sonst sind sie für Benutzer, die Dezimalzahlen erwarten, schrecklich (d.h. str(.5) sollte '.5' und nicht '1/2' zurückgeben). Das bedeutet, dass viele rationale Zahlen irgendwann abgeschnitten werden müssen, was zu einem neuen Präzisionsverlust führt.
Referenzen
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0240.rst
Zuletzt geändert: 2025-02-01 08:55:40 GMT