I agree that Clojure could really use an imaginary number type. The best place to start with this might be `clojure.math.numeric-tower` because it already provides a `MathFunctions` protocol that defines a square root operation.
Cheers Jan On 15 Aug 2014, at 19:54, Maik Schünemann <maikschuenem...@gmail.com> wrote: > Hi, > > On Fri, Aug 15, 2014 at 7:00 PM, Reid McKenzie <rmckenzi...@gmail.com> wrote: > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > The best way to build a complex arithmetic package is probably to work atop > `clojure.algo.generic`. I've done a pair of libraries > (https://github.com/arrdem/imprecise, https://github.com/arrdem/meajure) > based around extending algo.generic with custom datatypes and they've both > worked out well > I'll look at these. > Building complex arithmetic atop algo.generic wouldn't bring the desired > unification, because for example core.matrix doesn't use algo.generic ... > Clojure in general seems pretty loath to package "traditional" numerics > facilities... note that we don't even have a built in square root operator > and the common practice is to use java.lang.Math through interop so I > wouldn't go holding your breath over adding irrational numbers to the > language core. Also clojure.contrib is abandoned and deprecated in favor of > "real" community maintained standalone libraries. The most likely place for > an irrational type is probably either a user library like both of the above > or possibly algo.generic itself. > Yeah, I meant 'as a contrib library' when I wrote clojure.contrib. Sorry for > the confusion. > As for the other part, let me elaborate a bit: > As it is true that clojure doesn't have much numeric functions in core (like > the square root example), it doesn't eschew numeric /types/ like BigInt and > Rationals, and you obviously can't pass to java.lang.Math via interop > already. > > Take rationals as example. I really like them and use them often in my > clojure code because they give you exact arithmetic basically for free > because they are part of the core language and you can use them anywhere (in > pure clojure). They even have a convenient literal syntax (but that is not > that inportant). > > We had a discussion a while ago on the clojure-numerics mailing list on how > we could open core.matrix for arbitrary scalar types, like complex numbers or > symbolic expressions. I'll link this here as it could be of interest: > https://groups.google.com/forum/#!topic/numerical-clojure/Ze7lNjXJeQc/discussion > I think a reason that held the discussion back was missing standard types to > experiment with. > > I don't argue that clojure should provide complex types as part of > clojure.core and can understand the reasons not to (while I think it would be > the same reason as including rationals in clojure.core) but as a clojure > contrib library that other clojure math libraries build ontop of (including > core.matrix and algo.generic). > The tricky part would then be figuring out how to nicely interop with the > other clojure types without incuring too much overhead to be used in serious > scientific computing (I think algo.generic uses multimethods for dispatch, > which is definitly too slow in highly stressed inner loops of heavy matrix > manipulations for example). > > greetings > Maik > > Reid > > > On 08/15/2014 10:24 AM, Maik Schünemann wrote: > > Hi, > > > is there a recommended way to do complex arithmetic in > clojure ? > > > I am interested to see clojure going forward for scientific > computing purposes. > > > There is already considerable effort going on with > core.matrix, incanter, expresso etc. > > > But something thad is oddly lacking is support for complex > numbers. For some areas, this is > > > a show stopper and it is very basic stuff in other languages > and systems: > > > - common-lisp, python etc all have a standard complex type as > part of the language/standard library > > > - see language support here > http://en.wikipedia.org/wiki/Complex_data_type > > > > > > In Java, there are multiple incompatible complex number > classes and I don't want that incompatibilities > > > in clojure libraries that provide complex number > manipulation. > > > > > > In my opinion we should strive as a community for a standard > complex number datatype, that is agreed on by clojure libraries, > > > and plays nicely with clojures other numeric types. > > > Ideally, this would be provided as part of clojure.contrib or > even clojure itself - like rationals are! > > > > > > > > > > > > > > > -- > > > You received this message because you are subscribed to the > Google > > > Groups "Clojure" group. > > > To post to this group, send email to clojure@googlegroups.com > > > Note that posts from new members are moderated - please be > patient with your first post. > > > To unsubscribe from this group, send email to > > > clojure+unsubscr...@googlegroups.com > > > For more options, visit this group at > > > http://groups.google.com/group/clojure?hl=en > > > --- > > > You received this message because you are subscribed to the > Google Groups "Clojure" group. > > > To unsubscribe from this group and stop receiving emails from > it, send an email to clojure+unsubscr...@googlegroups.com > <mailto:clojure+unsubscr...@googlegroups.com>. > > > > For more options, visit https://groups.google.com/d/optout. > > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2 > > iQIcBAEBAgAGBQJT7jysAAoJELjHpJOzPfTlUqoP/3UGoIusWhK+/0yzYvqCHsPK > QzU7criJGsNCfP8h0H7kClwJh7gIZHJlnBDMVHh7eP6VDPlnunTv7nYbFCPMYUys > SiM0dhW94EqEKUtl0gcIUoFfhDBeAPhgoi02/Lm0w51CcarhEnstVFVnUOLJPbsB > sTJuEC1ZigBtJz8pwBzGQnBYIRDaSONSxAEoV8aDmXinKBh+mPZKDRkE2emHsxDi > kSkMmDYicmc/2chFnjdbhSvJQajqoKKZvxuHAVboKKkWqowgHbHaB3ybsoZs/GT9 > NYZEBVfEJWrgvQvgQsZNnuc2esd4f86JJp/QAyCvIzofsoNQbGBtPzbXBLkq7JYF > Me3JBwI1F9N221ZfTyRIXjRzc2P6cZdRcMAetsRgw2tSl94HVuHp2VGzaeqGlsR/ > b7tsv06o2jTlNbaH+o1lisAQcs7pTJ1SZO1FZmCBoY1/b7f3MVa//hAK5pHa/tMH > +bAVZaAtAe+K3JjCokHwN7MX1gfVUNyIxD9kj/jlnrq+Xmvg8U7EA16wH+NDEI0j > jDXUkcTYfdM/dR7NV5Jvzwgd9A7Gm+2If6xN4Kx1ZviJk+XP3tYWx3FoCLungjaz > FujqwSChdDQ3Qw9k9uJ8zUR+e+9EsOsB86CmX/BmQCifcEpp1KlTUzFaR1XR3Gbg > VS5qG9H32gMMXpXSU02M > =cssb > -----END PGP SIGNATURE----- > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.