Python Decimal
は、基数10の数値を格納します。これは、底の10の累乗を持つ比率と考えることができます。decimal.Decimalオブジェクトが理にかなっていないのはなぜですか?
これはなぜ失敗するのですか?
from decimal import Decimal
from numbers import Rational
assert issubclass(Decimal, Rational)
Python Decimal
は、基数10の数値を格納します。これは、底の10の累乗を持つ比率と考えることができます。decimal.Decimalオブジェクトが理にかなっていないのはなぜですか?
これはなぜ失敗するのですか?
from decimal import Decimal
from numbers import Rational
assert issubclass(Decimal, Rational)
同じ理由float
はRational
ない:float
又はDecimal
のすべての非無限大、非NaN値が合理的であるが、タイプは実数演算をモデル化することを意図しています。例えば、彼らは平方根をサポートしています。クラスは有理数または有理数のサブセットではないだろうをモデル化することを目的と
2.0**0.5
Decimal(2).sqrt()
。 Decimal`は `Rational`のサブクラスではない`ので
(はい、大丈夫、あなたが2**0.5
を行うことができますが、それはfloatにint型を強制します。)
私の間違いは、「合理的な数を保存する」と「合理的な操作だけをサポートする」という混乱を招いています。 – Eric
'assert'は失敗します。なぜそれが 'Rational'のサブクラスではないのかは異なる質問です。 – DyZ
10進数のドキュメントを見ていると、私はこのモジュールが私の知る限りの分数ではない丸めをしていることがわかります。 –