octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 3.0.2 release (mingw32 check)


From: Benjamin Lindner
Subject: Re: 3.0.2 release (mingw32 check)
Date: Tue, 26 Aug 2008 18:35:11 +0200
User-agent: Thunderbird 2.0.0.14 (Windows/20080421)

John W. Eaton wrote:
On 26-Aug-2008, Benjamin Lindner wrote:

| I assumed it, because the output is printed as a complex number:
| | octave:1> mat2str([-1/3])
| ans = -0.33333333333333331
| octave:2> mat2str([-1/3,i])
| ans = [-0.33333333333333331+0i;0+1i]
| | In the second case, -1/3 is printed as a complex number, thus I assumed | it must be expanded. I guess [-1/3,i] is internally stored as a complex | 2x1 matrix, so every element is "expanded" to a complex number. "expand" | might be the wrong terminus here, "convert" would be more appropriate, | sorry.

I thought you were talking about -1/3 by itself, not in the context of
[-1/3, i].  In that case, Octave initially reads a list of
epxressions.  Then when evaluating the [] operator expression to
create a matrix, each element is evaluated in turn.  -1/3 is purely
real.  i is complex.  When combining the elements to make the overall
matrix, Octave notes that some elements are complex and produces a
complex matrix.  When converting reals to complex, it calls the
std::complex constructor to create the complex value.  That
constructor sets the imaginary part to zero regardless of whether the
real part is negative.  I think that is a reasonable choice.

Thanks for the insight, I believe I see now why octave behaves the way it behaves...

So -1/3 being converted into a complex number yields -1/3+0i because of the std::complex constructor setting the imag part by default to zero. Whereas -i is created as std::complex with real part zero and then negated, which yields a real part of -0.

Now out of curiosity:
Why is the expression "-i" not immediatly created as std::complex with a imaginary part of -1 and a default real part of 0? Seems as "-i" is imterpreted as "(-1)*i" whereas "-1/3" is a single expression. Right?


The real problem is that we have no pure imaginary values, so i is
stored as (0,1). I don't think the complex number negation operator
should have a special case for when the real part is zero, do you?


No, I don't see a necessity here. Makes things only more complicated, with no real benefit.

benjamin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]