Talk:Roots of unity: Difference between revisions
Content added Content deleted
(Seed7 uses a similar convention as Algol68) |
(Oh ok...) |
||
Line 55:
</pre>
What do you think? [[User:Thomas Mertes|Thomas Mertes]] 09:35, 21 January 2008 (MST)
:Whatever is easier is fine as long as other people can figure it out. Maybe the output should explained a bit in the example. --[[User:Mwn3d|Mwn3d]] 09:52, 21 January 2008 (MST)
|
Revision as of 16:52, 21 January 2008
I think the Seed7 output has its real and imaginary parts reversed. (1.000*i)2 is -1 not 1. --Mwn3d 07:14, 21 January 2008 (MST)
Seed7 uses a similar convention as Algol68: The i is the separator between real and imaginary part (well in Algol68 it seems to be an i with an underscore which IIRC is a different alphabet). The output of -0.5000i+0.8660 means -0.5000+i*0.8660 which might be counter intuitive. I choosed it that way to make the 'parse' function (which converts a string to a complex) easy implementable as:
(** * Return the conversion of a string to a complex. *) const func complex: (attr complex) parse (in string: stri) is func result var complex: result is complex.value; local var integer: iPos is 0; begin iPos := pos(stri, 'i'); # Find the position of the i if iPos <> 0 then result.re := float parse (stri[.. pred(iPos)]); result.im := float parse (stri[succ(iPos) ..]); else raise RANGE_ERROR; end if; end func;
Maybe you have suggestions of how the output of a complex number should look like. If I write a complex number as -0.5000+i*0.8660 the 'parse' function could be:
(** * Return the conversion of a string to a complex. *) const func complex: (attr complex) parse (in string: stri) is func result var complex: result is complex.value; local var integer: iPos is 0; begin iPos := pos(stri, 'i'); # Find the position of the i if iPos > 1 then result.re := float parse (stri[.. iPos - 2]); result.im := float parse (stri[iPos + 2 ..]); if stri[pred(iPos)] = '-' then result.im := -result.im; elsif stri[pred(iPos)] <> '-' then raise RANGE_ERROR; end if; if stri[succ(iPos) len 1] <> "*" then raise RANGE_ERROR; end if; else raise RANGE_ERROR; end if; end func;
What do you think? Thomas Mertes 09:35, 21 January 2008 (MST)
- Whatever is easier is fine as long as other people can figure it out. Maybe the output should explained a bit in the example. --Mwn3d 09:52, 21 January 2008 (MST)