std.complex
Lars T. Kyllingstad
public at kyllingen.net
Wed Jan 1 15:08:59 PST 2014
On Wednesday, 1 January 2014 at 19:55:58 UTC, Joseph Rushton
Wakeling wrote:
> On Wednesday, 1 January 2014 at 12:29:35 UTC, Stewart Gordon
> wrote:
>> [...] why do you need an appropriate application in order not
>> to have this arbitrary restriction? Or have I missed
>> something?
>
> 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, exponentiation even more so.
>
> I imagine there are ways to resolve this, but it certainly
> simplifies implementation to assume floating-point, and absent
> a compelling application there is not much reason to avoid that
> simplification.
I agree completely. This is the main reason why I chose to
explicitly disallow integral types when I wrote std.complex.
>> It isn't just integer types. Somebody might want to use
>> complex with a library (fixed-point, arbitrary precision,
>> decimal, etc.) numeric type.
>> Fractal generators, for example, are likely to use this a lot.
>
> I agree that such any numeric type that effectively models a
> real number should be supported. In principle it ought to be
> sufficient to check that the required "floating-point-ish"
> operations (including sin and cos) are supported, plus maybe
> some tweaks to how internal temporary values are handled.
Agreed. Any "floating point-like" library type which is to be
supported by std.complex must either have cos(), sin(), hypot(),
etc. as member functions (since std.complex cannot import non-std
modules), or the type needs to be supported by std.math as well.
If so, std.math is the place to start, not std.complex.
More information about the Digitalmars-d
mailing list