<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 29, 2013 at 4:02 AM, Steven D'Aprano <span dir="ltr"><<a href="mailto:steve@pearwood.info" target="_blank">steve@pearwood.info</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 28/08/13 20:48, Draic Kin wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
For the same reason, I could think that isinstance(Decimal, Rational) -><br>
True<br>
</blockquote>
<br></div>
If Decimal were a subclass of Rational, so should float. The only fundamental difference between the two is that one uses base 10 floating point numbers and the other uses base 2.<div class="im"><br></div></blockquote><div>
Another difference is, that precision of float is fixly limited. I actually thought that Decimal is unlimited the same way as int, however decimal.MAX_PREC is pretty big number. But you're right Decimal shouldn't be subclass of Rational. However the original question was why it is not subclass of Real.<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
and issubclass(Rational, Real) -> False. It's more about exact vs.<br>
non-exact computations which is orthogonal to number hierarchy.<br>
</blockquote>
<br></div>
The numeric tower is precisely about the numeric hierarchy of Number > Complex > Real > Rational > Integral, and since they are all *abstract* base classes, exact and inexact doesn't come into it. Concrete classes can be inexact or exact, or one could implement separate Exact and Inexact towers.<br>

 </blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
In practice, it's hard to think of a concrete way to implement exact real numbers. Maybe a symbolic maths application like Mathematica comes close?<div class="im"><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Maybe there<br>
should be some ExactNumber abstract base class and some convention that<br>
exact shouldn't coerce with non-exact. So Decimal + float should raise an<br>
exception even if both would be subclasses of Real (and Decimal even of<br>
Rational). Or maybe it would be enough if there were just non-exact<br>
variants of Real and Complex since non-exactness if just issue of them.<br>
</blockquote>
<br>
<br></div>
Personally, I would implement inexact/exact as an attribute on the type:<br>
<br>
if type(x).exact: ...<br>
<br>
<br>
sort of thing.<div class="HOEnZb"><div><br></div></div></blockquote><div>There were some points (possible against the idea of issubclass(Decimal, Real) -> True) like Decimal doesn't coerce to float, you cannot convert Fraction to Decimal easily, you cannot sum Fraction + Decimal. Maybe some of the rationale for the behavior is the matter of exact vs. non-exact. So for that reason the exactness rationale could be made explicit by adding some indicator of exacness and base some coercion cases on this indicator.<br>
</div><br></div></div></div>