Re: log for complex
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
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
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
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
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
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...