I would also like to point out that the current behavior of Fraction is consistent with other parts of the numeric system, e.g. 1/1 produces 1.0 (rather than 1) math.sqrt(4) produces 2.0 (rather than 2) 1j-1j produces 0j (rather than 0.0 or 0)
So in general the type of the output is determined by what the operation would in general return for that input type, as opposed to a more specific type which only applies to the specific input value. Stephan Op do 30 aug. 2018 om 15:03 schreef Steven D'Aprano <st...@pearwood.info>: > On Wed, Aug 29, 2018 at 09:39:05PM -0700, Neil Girdhar wrote: > > > Would there be any problem with changing: > > > > In [4]: Fraction(1, 1) ** Fraction(2, 3) > > Out[4]: 1.0 > > > > In [5]: Fraction(-1, 1) ** Fraction(2, 3) > > Out[5]: (-0.4999999999999998+0.8660254037844387j) > > > > In [6]: Fraction(0, 1) ** Fraction(2, 3) > > Out[6]: 0.0 > > > > I'd like these to be Fraction(1), Fraction(1), and Fraction(0). > > If anyone else has mentioned the backward-compatibility issue by now, I > haven't see it. I believe that would make it a fairly big problem. > > I expect that there is code out in the wild which (for good or ill) now > expects 1**Fraction(2, 3) to return 1.0, rather than Fraction(1), and > similarly for the other examples. Changing that could break people's > code. > > Even if we had consensus that this was a good idea, or at least > consensus from the maths-folk who care about this sort of thing (I'd > like to know what Uncle Timmy and Mark think of this idea), it would > still probably need a "__future__" import to activate it, or a > deprecation period. Or some other annoyance. > > Possibly the simpler approach would be to add a subclass that does what > you want. UnitRootFraction or something. > > Then the only argument will be whether such a subclass ought to go into > the fractions module, or your own personal toolkit :-) > > I must admit though, I'm a bit curious as to what you are doing that > having 1**Fraction(2,3) return 1.0 is an annoyance, but having > 27**Fraction(2,3) return 8.999999999999998 instead of Fraction(9) isn't. > > > > -- > Steve > _______________________________________________ > Python-ideas mailing list > Python-ideas@python.org > https://mail.python.org/mailman/listinfo/python-ideas > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/