std.complex

Stewart Gordon smjg_1998 at yahoo.com
Thu Jan 2 10:13:07 PST 2014


On 01/01/2014 19:55, Joseph Rushton Wakeling wrote:
<snip>
> There are binary operations on complex numbers where the only sensible
> outcome seems to be non-integral real and imaginary parts. Addition,
> subtraction and multiplication are OK with integral types, but division
> really seems unpleasant to implement absent floating point,

Then why not just disable division if it's a non-float type, rather than 
preventing the whole complex template from being used with that type? 
This is like cutting off somebody's arm because they have a sore thumb.

Moreover, we have no way in the general case of determining whether T is 
an integral type, a library float-esque type, or (for example) a Galois 
field type.  So disabling it _just in case_ division doesn't work is 
crazy.  There must be better ways to do it.

> exponentiation even more so.

Exponentiation by a non-negative integer is straightforward.  So we 
should at least support this case for Gaussian integers.

<snip>
> However, I think relaxing the template constraints like this would best
> be done in the context of a library float-esque type (e.g. BigFloat)
> being implemented in Phobos, which could then be used to provide both
> proof-of-concept and the primary test case.

What do you mean by "in the context of", exactly?  Restricting it to 
some float-esque type that is in Phobos would still be overly restrictive.

>> Or even more exotically, use Complex!(Complex!real) to implement
>> hypercomplex numbers.
>
> Perhaps best implemented as a type in its own right?

It would, but removing the restriction would simplify the implementation 
of Hypercomplex(T) by enabling it to be a wrapper for Complex!(Complex!T).

Stewart.


More information about the Digitalmars-d mailing list