<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/234831</link>
    <title>MATLAB Central Newsreader - FPT : bitsra function and CORDIC</title>
    <description>Feed for thread: FPT : bitsra function and CORDIC</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Tue, 19 Aug 2008 17:27:02 -0400</pubDate>
      <title>FPT : bitsra function and CORDIC</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/234831#596373</link>
      <author>Michael Hui</author>
      <description>This should be a follow-up on an active thread but I can't&lt;br&gt;
find it now ... I apologize.&lt;br&gt;
&lt;br&gt;
I converted the inner loop of my CORDIC from integer-only&lt;br&gt;
implementation:&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;x(i+1) = x(i) + sgn(y(i))*floor(y(i)*pow2(1-i));&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;y(i+1) = y(i) - sgn(y(i))*floor(x(i)*pow2(1-i));&lt;br&gt;
&lt;br&gt;
To FPT implementation:&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;switch sgn(y(i))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case -1 , x(i+1) = x(i) - bitsra(y(i),i-1);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case  0 , x(i+1) = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case  1 , x(i+1) = x(i) + bitsra(y(i),i-1);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;switch sgn(y(i))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case -1 , y(i+1) = y(i) + bitsra(x(i),i-1);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case  0 , y(i+1) = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case  1 , y(i+1) = y(i) - bitsra(x(i),i-1);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&lt;br&gt;
I noticed two problems, when running 7.6.0 on Linux:&lt;br&gt;
&lt;br&gt;
1) the underflow messages do appear when bitsra is used,&lt;br&gt;
contrary to what the other thread just claimed.&lt;br&gt;
&lt;br&gt;
2) the execution speed, at least in interpreted mode, slowed&lt;br&gt;
way down, by more than factor of 20.&lt;br&gt;
&lt;br&gt;
The integer-only implementation was written for speed,&lt;br&gt;
admittedly, so it avoids the needless left and right shifts&lt;br&gt;
during rounding just to maintain the binary point.&lt;br&gt;
&lt;br&gt;
So the question is: is this the best way to do this simple&lt;br&gt;
operation? I'm looking for something both easy to read and fast.&lt;br&gt;
&lt;br&gt;
I'm using&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;x(i+1) = x(i) + sgn(y(i))*floor(y(i)*pow2(1-i));&lt;br&gt;
&lt;br&gt;
instead of&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;x = x + sgn(y) * floor( y * pow2(1-i) );&lt;br&gt;
&lt;br&gt;
just to keep track of what happens after each iteration.&lt;br&gt;
It's not a required part of the algorithm.</description>
    </item>
  </channel>
</rss>

