📄 fix_8cpp-source.html
字号:
00198 }00199 bit >>= 1;00200 }00201 <span class="keywordflow">while</span>(bit);00202 00203 <span class="preprocessor">#else</span>00204 <span class="preprocessor"></span>00205 <span class="comment">// calculate the integer part of result (bits 31 to 16)</span>00206 <span class="keywordflow">switch</span>(intBits)00207 {00208 <span class="keywordflow">case</span> 14:00209 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<14))00210 a -= (b<<14), r += 1<<(14+16);00211 <span class="keywordflow">case</span> 13:00212 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<13))00213 a -= (b<<13), r += 1<<(13+16);00214 <span class="keywordflow">case</span> 12:00215 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<12))00216 a -= (b<<12), r += 1<<(12+16);00217 <span class="keywordflow">case</span> 11:00218 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<11))00219 a -= (b<<11), r += 1<<(11+16);00220 <span class="keywordflow">case</span> 10:00221 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<10))00222 a -= (b<<10), r += 1<<(10+16);00223 <span class="keywordflow">case</span> 9:00224 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<9))00225 a -= (b<<9), r += 1<<(9+16);00226 <span class="keywordflow">case</span> 8:00227 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<8))00228 a -= (b<<8), r += 1<<(8+16);00229 <span class="keywordflow">case</span> 7:00230 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<7))00231 a -= (b<<7), r += 1<<(7+16);00232 <span class="keywordflow">case</span> 6:00233 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<6))00234 a -= (b<<6), r += 1<<(6+16);00235 <span class="keywordflow">case</span> 5:00236 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<5))00237 a -= (b<<5), r += 1<<(5+16);00238 <span class="keywordflow">case</span> 4:00239 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<4))00240 a -= (b<<4), r += 1<<(4+16);00241 <span class="keywordflow">case</span> 3:00242 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<3))00243 a -= (b<<3), r += 1<<(3+16);00244 <span class="keywordflow">case</span> 2:00245 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<2))00246 a -= (b<<2), r += 1<<(2+16);00247 <span class="keywordflow">case</span> 1:00248 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<1))00249 a -= (b<<1), r += 1<<(1+16);00250 <span class="keywordflow">case</span> 0:00251 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=((<a class="code" href="group__integers.html#ga2">uint32</a>)b<<0))00252 a -= (b<<0), r += 1<<(0+16);00253 <span class="keywordflow">break</span>;00254 <span class="keywordflow">default</span>:00255 <span class="comment">// produce saturated result</span>00256 <span class="keywordflow">return</span> (r<0) ? 0x80000000 : 0x7fffffff; <span class="comment">// saturated result</span>00257 }00258 00259 <span class="comment">// calculate the fractional part of result (bits 15 to 0)</span>00260 a <<= 1;00261 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00262 a -= b, r += 1<<15;00263 a <<= 1;00264 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00265 a -= b, r += 1<<14;00266 a <<= 1;00267 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00268 a -= b, r += 1<<13;00269 a <<= 1;00270 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00271 a -= b, r += 1<<12;00272 a <<= 1;00273 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00274 a -= b, r += 1<<11;00275 a <<= 1;00276 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00277 a -= b, r += 1<<10;00278 a <<= 1;00279 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00280 a -= b, r += 1<<9;00281 a <<= 1;00282 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00283 a -= b, r += 1<<8;00284 a <<= 1;00285 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00286 a -= b, r += 1<<7;00287 a <<= 1;00288 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00289 a -= b, r += 1<<6;00290 a <<= 1;00291 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00292 a -= b, r += 1<<5;00293 a <<= 1;00294 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00295 a -= b, r += 1<<4;00296 a <<= 1;00297 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00298 a -= b, r += 1<<3;00299 a <<= 1;00300 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00301 a -= b, r += 1<<2;00302 a <<= 1;00303 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00304 a -= b, r += 1<<1;00305 a <<= 1;00306 <span class="keywordflow">if</span>((<a class="code" href="group__integers.html#ga2">uint32</a>)a>=(<a class="code" href="group__integers.html#ga2">uint32</a>)b)00307 a -= b, r += 1<<0;00308 00309 <span class="preprocessor">#endif</span>00310 <span class="preprocessor"></span>00311 <span class="keywordflow">return</span> (r<0) ? 0x80000000-r : r;00312 00313 }00314 00315 <a name="l00316"></a><a class="code" href="classFix.html#e5">00316</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="group__fix.html#ga0">fix</a> <a class="code" href="classFix.html#e5">Fix::Sqrt</a>(ufix a)00317 {00318 <a class="code" href="group__fix.html#ga1">ufix</a> r,nr,m;00319 00320 <span class="comment">// calculate integer part (bits 31 to 16)</span>00321 r = 0;00322 m = 0x40000000;00323 <span class="keywordflow">do</span>00324 {00325 nr = r+m;00326 <span class="keywordflow">if</span>(nr<=a)00327 {00328 a -= nr;00329 r = nr+m;00330 }00331 r >>= 1;00332 m >>= 2;00333 }00334 <span class="keywordflow">while</span>(m);00335 00336 <span class="comment">// calculate bits 15 to 8</span>00337 r <<= 8;00338 a <<= 8;00339 m = 0x40;00340 <span class="keywordflow">do</span>00341 {00342 nr = r+m;00343 <span class="keywordflow">if</span>(nr<=a)00344 {00345 a -= nr;00346 r = nr+m;00347 }00348 r >>= 1;00349 m >>= 2;00350 }00351 <span class="keywordflow">while</span>(m);00352 00353 <span class="comment">// calculate bits 7 to 0</span>00354 r <<= 8;00355 a <<= 8;00356 m = 0x40;00357 <span class="keywordflow">do</span>00358 {00359 nr = r+m;00360 <span class="keywordflow">if</span>(nr<=a)00361 {00362 a -= nr;00363 r = nr+m;00364 }00365 r >>= 1;00366 m >>= 2;00367 }00368 <span class="keywordflow">while</span>(m);00369 00370 <span class="comment">// round result</span>00371 <span class="keywordflow">if</span>(r<a)00372 r++;00373 00374 <span class="keywordflow">return</span> r;00375 }00376 00377 <a name="l00378"></a><a class="code" href="classFix.html#e6">00378</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="group__fix.html#ga0">fix</a> <a class="code" href="classFix.html#e6">Fix::Log2</a>(ufix a)00379 {00380 <span class="comment">// trap 0</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -