From steinmetz!uunet!seismo!sundc!pitstop!sun!decwrl!labrea!agate!pasteur!ames!ll-xn!vanhove Fri Feb 26 11:12:41 1988 Path: beowulf!steinmetz!uunet!seismo!sundc!pitstop!sun!decwrl!labrea!agate!pasteur!ames!ll-xn!vanhove From: vanhove@XN.LL.MIT.EDU (Patrick Van Hove) Newsgroups: comp.graphics Subject: Re: CORDICS Message-ID: <923@xn.LL.MIT.EDU> Date: 26 Feb 88 16:12:41 GMT Organization: MIT Lincoln Laboratory, Lexington, MA Lines: 57 In-reply-to: turk@apple.UUCP's message of 18 Feb 88 02:19:06 GMT Thanks to "Turk" for posting the CORDIC scheme + code. I have a few comments which readers may find useful First, I think the expression for the rotation should be in terms of PRODUCTS instead of SUMS -i [ x' ] [ 1 -d 2 ] [ x ] [ ] [ i ] [ ] [ ] = Prod { C } Prod { [ -i ] [ ] } [ y' ] i i i [ d 2 1 ] [ y ] i (a look at the code will assure you that this is what's implemented) Second, in the above expression, C_i = cos (atan (2^-i)) In the implementation, if you wondered what the numbers are in the first page: ># define COSCALE 0x22c2dd1c /* 0.271572 */ > >static long arctantab[32] = { ># ifdef DEGREES /* MS 10 integral bits */ ># define QUARTER (90 << 22) > 266065460, 188743680, 111421900, 58872272, 29884485, 15000234, 7507429, > 3754631, 1877430, 938729, 469366, 234683, 117342, 58671, 29335, 14668, > 7334, 3667, 1833, 917, 458, 229, 115, 57, 29, 14, 7, 4, 2, 1, 0, 0, ># else ># ifdef RADIANS /* MS 4 integral bits */ ># define QUARTER ((int)(3.141592654 / 2.0 * (1 << 28))) > 297197971, 210828714, 124459457, 65760959, 33381290, 16755422, 8385879, > 4193963, 2097109, 1048571, 524287, 262144, 131072, 65536, 32768, 16384, > 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, ># else ># define BRADS 1 ># define QUARTER (1 << 30) > 756808418, 536870912, 316933406, 167458907, 85004756, 42667331, > 21354465, 10679838, 5340245, 2670163, 1335087, 667544, 333772, 166886, > 83443, 41722, 20861, 10430, 5215, 2608, 1304, 652, 326, 163, 81, 41, > 20, 10, 5, 3, 1, 1, ># endif ># endif > it turns out that COSCALE is the product of all the C_i's, and that the numbers in arctantab are the sequence of angles: arctan ( 2^-i ), for i = -1, 0, ..., 30 normalized so that 90 degrees is equal to QUARTER. I hope I saved the time of some readers in figuring this out. Patrick Van Hove