2017-03-16 5 views
1

Ein Python Decimal speichert eine Basis 10 Nummer, die man sich als Verhältnis mit einer Potenz von 10 auf der Unterseite vorstellen kann.Warum wird ein decimal.Decimal-Objekt nicht als rational betrachtet?

Warum scheitert das?

from decimal import Decimal 
from numbers import Rational 

assert issubclass(Decimal, Rational) 
+0

'assert' schlägt fehl, da' Decimal' nicht eine Unterklasse von 'Rational' ist. Warum ist es nicht eine Unterklasse von "Rational" ist eine andere Frage. – DyZ

+0

Aus einem flüchtigen Blick auf die Dezimal-Dokumente sehe ich, dass dieses Modul eine Art Abrundung macht, die Bruchteile, soweit ich weiß, nicht tun. –

Antwort

2

Aus demselben Grund float ist nicht Rational: während alle nicht unendlich, nicht-NaN-Werte von float oder Decimal rational sind, werden die Arten bestimmt Realzahlarithmetik zu modellieren. Zum Beispiel unterstützen sie Quadratwurzeln:

2.0**0.5 
Decimal(2).sqrt() 

die eine Klasse rationalen Zahlen oder eine Teilmenge der rationalen würde nicht modellieren soll.

(Ja, okay, man kann 2**0.5 tun, aber das zwingt den int mit einem Schwimmer.)

+0

Richtig, mein Fehler ist verwirrend "speichert eine rationale Zahl" und "unterstützt nur rationale Operationen" – Eric

Verwandte Themen