Re: log for complex

2018-03-07 Thread H. S. Teoh via Digitalmars-d-learn
On Wed, Mar 07, 2018 at 10:47:40AM +, J-S Caux via Digitalmars-d-learn 
wrote:
> On Wednesday, 7 March 2018 at 10:28:23 UTC, Simen Kjærås wrote:
> > On Wednesday, 7 March 2018 at 10:10:49 UTC, J-S Caux wrote:
> > > On Wednesday, 7 March 2018 at 08:04:36 UTC, Simen Kjærås wrote:
> > > > auto log(T)(Complex!T x) {
> > > > import std.math : log;
> > > > return Complex!T(log(abs(x)), arg(x));
> > > > }
> > > 
> > > Yes indeed I can do this, but isn't this inefficient as compared
> > > to what it should be? The internals of arg are presumable already
> > > doing part of/all the necessary work.
> > 
> > arg is just atan2 in disguise, and doesn't do any logarithms. I
> > mean, in a way it does, but it's really just a fpatan instruction. I
> > don't expect there to be many optimization opportunities here.
[...]
> OK thanks Simen. Should your suggestion for repairing this omission be
> filed as a bugreport? I can of course implement it locally for myself,
> but the language should really provide this function directly.

Yes, please file a bug.


T

-- 
The trouble with TCP jokes is that it's like hearing the same joke over and 
over.


Re: log for complex

2018-03-07 Thread J-S Caux via Digitalmars-d-learn

On Wednesday, 7 March 2018 at 10:28:23 UTC, Simen Kjærås wrote:

On Wednesday, 7 March 2018 at 10:10:49 UTC, J-S Caux wrote:

On Wednesday, 7 March 2018 at 08:04:36 UTC, Simen Kjærås wrote:

auto log(T)(Complex!T x) {
import std.math : log;
return Complex!T(log(abs(x)), arg(x));
}


Yes indeed I can do this, but isn't this inefficient as 
compared to what it should be? The internals of arg are 
presumable already doing part of/all the necessary work.


arg is just atan2 in disguise, and doesn't do any logarithms. I 
mean, in a way it does, but it's really just a fpatan 
instruction. I don't expect there to be many optimization 
opportunities here.


--
  Simen


OK thanks Simen. Should your suggestion for repairing this 
omission be filed as a bugreport? I can of course implement it 
locally for myself, but the language should really provide this 
function directly.


Re: log for complex

2018-03-07 Thread Simen Kjærås via Digitalmars-d-learn

On Wednesday, 7 March 2018 at 10:10:49 UTC, J-S Caux wrote:

On Wednesday, 7 March 2018 at 08:04:36 UTC, Simen Kjærås wrote:

auto log(T)(Complex!T x) {
import std.math : log;
return Complex!T(log(abs(x)), arg(x));
}


Yes indeed I can do this, but isn't this inefficient as 
compared to what it should be? The internals of arg are 
presumable already doing part of/all the necessary work.


arg is just atan2 in disguise, and doesn't do any logarithms. I 
mean, in a way it does, but it's really just a fpatan 
instruction. I don't expect there to be many optimization 
opportunities here.


--
  Simen


Re: log for complex

2018-03-07 Thread J-S Caux via Digitalmars-d-learn

On Wednesday, 7 March 2018 at 08:04:36 UTC, Simen Kjærås wrote:

On Wednesday, 7 March 2018 at 07:42:37 UTC, J-S Caux wrote:

Simple question: how do I get the log of a complex number?

If I try the simple
logtest = log(complex(1.0, 2.0))

I get the compiler error

Error: function core.stdc.math.log(double x) is not callable 
using argument types (Complex!double)


Some basic functions are described in 
https://dlang.org/phobos/std_complex.html, but not the log...


That seems like an oversight. For now, this should work:

auto log(T)(Complex!T x) {
import std.math : log;
return Complex!T(log (abs(x)), arg(x));
}

--
  Simen


Yes indeed I can do this, but isn't this inefficient as compared 
to what it should be? The internals of arg are presumable already 
doing part of/all the necessary work.




Re: log for complex

2018-03-07 Thread Simen Kjærås via Digitalmars-d-learn

On Wednesday, 7 March 2018 at 07:42:37 UTC, J-S Caux wrote:

Simple question: how do I get the log of a complex number?

If I try the simple
logtest = log(complex(1.0, 2.0))

I get the compiler error

Error: function core.stdc.math.log(double x) is not callable 
using argument types (Complex!double)


Some basic functions are described in 
https://dlang.org/phobos/std_complex.html, but not the log...


That seems like an oversight. For now, this should work:

auto log(T)(Complex!T x) {
import std.math : log;
return Complex!T(log (abs(x)), arg(x));
}

--
  Simen


log for complex

2018-03-06 Thread J-S Caux via Digitalmars-d-learn

Simple question: how do I get the log of a complex number?

If I try the simple
logtest = log(complex(1.0, 2.0))

I get the compiler error

Error: function core.stdc.math.log(double x) is not callable 
using argument types (Complex!double)


Some basic functions are described in 
https://dlang.org/phobos/std_complex.html, but not the log...