Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
March 07, 2018 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... |
March 07, 2018 Re: log for complex | ||||
---|---|---|---|---|
| ||||
Posted in reply to J-S Caux | 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
|
March 07, 2018 Re: log for complex | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Kjærås | 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.
|
March 07, 2018 Re: log for complex | ||||
---|---|---|---|---|
| ||||
Posted in reply to J-S Caux | 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
|
March 07, 2018 Re: log for complex | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Kjærås | 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.
|
March 07, 2018 Re: log for complex | ||||
---|---|---|---|---|
| ||||
Posted in reply to J-S Caux | On Wed, Mar 07, 2018 at 10:47:40AM +0000, 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. |
Copyright © 1999-2021 by the D Language Foundation