2017-03-16 2 views
1

Un python Decimal stocke un nombre de base 10, ce qui peut être considéré comme un ratio avec une puissance de 10 sur le fond.Pourquoi un objet decimal.Decimal n'est-il pas considéré comme rationnel?

Alors, pourquoi cela échoue-t-il?

from decimal import Decimal 
from numbers import Rational 

assert issubclass(Decimal, Rational) 
+0

'assert' échoue parce que' Decimal' n'est pas une sous-classe de 'Rational'. Pourquoi n'est-ce pas une sous-classe de 'Rational' est une question différente. – DyZ

+0

D'un coup d'œil rapide sur les documents décimaux, je vois que ce module fait une sorte d'arrondi que les fractions autant que je sache ne le font pas. –

Répondre

2

Même raison float n'est pas Rational: alors que tous les non-infinies, des valeurs non NaN de float ou Decimal sont rationnels, les types sont destinés à modéliser l'arithmétique nombre réel. Par exemple, ils soutiennent des racines carrées:

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

une classe qui vise à modéliser des nombres rationnels ou un sous-ensemble des rationals ne serait pas.

(Oui, d'accord, vous pouvez faire 2**0.5, mais que l'int contraint un flotteur.)

+0

A droite, mon erreur est confuse "stocke un nombre rationnel" et "ne supporte que des opérations rationnelles" – Eric