On Sat Jan 02 15:19:11 2016, elizabeth wrote: > > On 02 Jan 2016, at 20:54, Dan Kogai (via RT) <perl6-bugs- > > follo...@perl.org> wrote: > > > > # New Ticket Created by Dan Kogai > > # Please include the string: [perl #127126] > > # in the subject line of all future correspondence about this issue. > > # <URL: https://rt.perl.org/Ticket/Display.html?id=127126 > > > > > > > Oops, the previous message does not contain the patch so I am > > submitting again. Use the patch below or just pull > > https://github.com/rakudo/rakudo/pull/667 . > > > > ==== > > > > I am glad perl6 supports complex numbers natively. What I am not glad > > is that its definition of i does not agree with mathematics: > > > > % perl6 > > > >> sqrt(-1+0i) > > 6.12323399573677e-17+1i > > > > Though (-1+0i)**0.5 != 1i for most other platforms, they still get > > sqrt(-1+0i) right: > > > > % python > > > > Python 2.7.10 (default, Oct 23 2015, 18:05:06) > > [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin > > Type "help", "copyright", "credits" or "license" for more > > information. > >>>> from cmath import * > >>>> sqrt(-1+0j) > > 1j > >>>> (-1+0j)**0.5 > > (6.123233995736766e-17+1j) > >>>> ^D > > > > % irb > > > > irb(main):001:0> require 'cmath' > > => true > > irb(main):002:0> CMath.sqrt(-1) > > => (0+1.0i) > > irb(main):003:0> ^D > > > > % perl -MMath::Complex -dE 1 > > > > Loading DB routines from perl5db.pl version 1.49 > > Editor support available. > > > > Enter h or 'h h' for help, or 'man perldebug' for more help. > > > > main::(-e:1): 1 > > DB<1> p sqrt(-1+0*i) > > i > > DB<2> p (-1+0*i)**0.5 > > 6.12323399573677e-17+i > > > > So here is the patch that defines sqrt in sqrt. > > > > Dan the Complex Perl6 Newbie > > > > --- > > src/core/Complex.pm | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/src/core/Complex.pm b/src/core/Complex.pm > > index 8314025..74b1d5b 100644 > > --- a/src/core/Complex.pm > > +++ b/src/core/Complex.pm > > @@ -80,8 +80,10 @@ my class Complex is Cool does Numeric { > > } > > > > method sqrt(Complex:D:) { > > - my Num ($mag, $angle) = self.polar; > > - $mag.sqrt.unpolar($angle/2); > > + my Num $abs = self.abs; > > + my Num $re = (($abs + self.re)/2).sqrt; > > + my Num $im = (($abs - self.re)/2).sqrt; > > + Complex.new($re, self.im < 0 ?? -$im !! $im); > > } > > > > multi method exp(Complex:D:) { > > -- > > 2.5.4 (Apple Git-61) > > Pull request 667 has been merged, this ticket can be closed. > > > Liz
Thanks! I'm closing this ticket as 'resolved'.