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.

Reply via email to