📄 fixedmath_8h-source.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>MiniGUI V1.6.10 API Reference: fixedmath.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.4.2 --><div class="qindex"><a class="qindex" href="index.htm">Main Page</a> | <a class="qindex" href="modules.htm">Modules</a> | <a class="qindex" href="classes.htm">Alphabetical List</a> | <a class="qindex" href="annotated.htm">Data Structures</a> | <a class="qindex" href="dirs.htm">Directories</a> | <a class="qindex" href="files.htm">File List</a> | <a class="qindex" href="functions.htm">Data Fields</a> | <a class="qindex" href="globals.htm">Globals</a> | <a class="qindex" href="pages.htm">Related Pages</a></div><div class="nav"><a class="el" href="dir_000003.htm">include</a></div><h1>fixedmath.h</h1><a href="fixedmath_8h.htm">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 00021 <span class="comment">/*</span>00022 <span class="comment"> * $Id: fixedmath.h 7364 2007-08-16 05:20:20Z xgwang $</span>00023 <span class="comment"> *</span>00024 <span class="comment"> * MiniGUI for Linux/uClinux, eCos, uC/OS-II, VxWorks, </span>00025 <span class="comment"> * pSOS, ThreadX, NuCleus, OSE, and Win32.</span>00026 <span class="comment"> *</span>00027 <span class="comment"> * Copyright (C) 2002-2007 Feynman Software. </span>00028 <span class="comment"> * Copyright (C) 1998-2002 Wei Yongming.</span>00029 <span class="comment"> *</span>00030 <span class="comment"> * Fixed-point math routins come from Allegro (a gift software)</span>00031 <span class="comment"> * by Shawn Hargreaves and others.</span>00032 <span class="comment"> */</span>00033 00034 <span class="preprocessor">#ifndef _MGUI_FIXED_MATH_H</span>00035 <span class="preprocessor"></span><span class="preprocessor">#define _MGUI_FIXED_MATH_H</span>00036 <span class="preprocessor"></span>00037 <span class="preprocessor">#include <errno.h></span>00038 <span class="preprocessor">#include <math.h></span>00039 00040 <span class="comment">/* Set up for C function definitions, even when using C++ */</span>00041 <span class="preprocessor">#ifdef __cplusplus</span>00042 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {00043 <span class="preprocessor">#endif</span>00044 <span class="preprocessor"></span>00045 <span class="preprocessor">#ifdef _FIXED_MATH</span>00046 <span class="preprocessor"></span>00087 MG_EXPORT <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga3">fixsqrt</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x);00088 00099 MG_EXPORT <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga4">fixhypot</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x, <a class="code" href="group__gdi__types.htm#ga10">fixed</a> y);00100 00113 MG_EXPORT <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga5">fixatan</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x);00114 00129 MG_EXPORT <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga6">fixatan2</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> y, <a class="code" href="group__gdi__types.htm#ga10">fixed</a> x);00130 00131 <span class="keyword">extern</span> MG_EXPORT <a class="code" href="group__gdi__types.htm#ga10">fixed</a> _cos_tbl[];00132 <span class="keyword">extern</span> MG_EXPORT <a class="code" href="group__gdi__types.htm#ga10">fixed</a> _tan_tbl[];00133 <span class="keyword">extern</span> MG_EXPORT <a class="code" href="group__gdi__types.htm#ga10">fixed</a> _acos_tbl[];00134 00135 <span class="comment">/************************** inline fixed point math functions *****************/</span>00136 <span class="comment">/* ftofix and fixtof are used in generic C versions of fixmul and fixdiv */</span>00137 <a name="l00150"></a><a class="code" href="group__fixed__math__fns.htm#ga7">00150</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga7">ftofix</a> (<span class="keywordtype">double</span> x)00151 { 00152 <span class="keywordflow">if</span> (x > 32767.0) {00153 errno = ERANGE;00154 <span class="keywordflow">return</span> 0x7FFFFFFF;00155 }00156 00157 <span class="keywordflow">if</span> (x < -32767.0) {00158 errno = ERANGE;00159 <span class="keywordflow">return</span> -0x7FFFFFFF;00160 }00161 00162 <span class="keywordflow">return</span> (<span class="keywordtype">long</span>)(x * 65536.0 + (x < 0 ? -0.5 : 0.5)); 00163 }00164 <a name="l00174"></a><a class="code" href="group__fixed__math__fns.htm#ga8">00174</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__fixed__math__fns.htm#ga8">fixtof</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x)00175 { 00176 <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)x / 65536.0; 00177 }00178 00179 <a name="l00194"></a><a class="code" href="group__fixed__math__fns.htm#ga9">00194</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga9">fixadd</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x, <a class="code" href="group__gdi__types.htm#ga10">fixed</a> y)00195 {00196 <a class="code" href="group__gdi__types.htm#ga10">fixed</a> result = x + y;00197 00198 <span class="keywordflow">if</span> (result >= 0) {00199 <span class="keywordflow">if</span> ((x < 0) && (y < 0)) {00200 errno = ERANGE;00201 <span class="keywordflow">return</span> -0x7FFFFFFF;00202 }00203 <span class="keywordflow">else</span>00204 <span class="keywordflow">return</span> result;00205 }00206 <span class="keywordflow">else</span> {00207 <span class="keywordflow">if</span> ((x > 0) && (y > 0)) {00208 errno = ERANGE;00209 <span class="keywordflow">return</span> 0x7FFFFFFF;00210 }00211 <span class="keywordflow">else</span>00212 <span class="keywordflow">return</span> result;00213 }00214 }00215 <a name="l00231"></a><a class="code" href="group__fixed__math__fns.htm#ga10">00231</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga10">fixsub</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x, <a class="code" href="group__gdi__types.htm#ga10">fixed</a> y)00232 {00233 <a class="code" href="group__gdi__types.htm#ga10">fixed</a> result = x - y;00234 00235 <span class="keywordflow">if</span> (result >= 0) {00236 <span class="keywordflow">if</span> ((x < 0) && (y > 0)) {00237 errno = ERANGE;00238 <span class="keywordflow">return</span> -0x7FFFFFFF;00239 }00240 <span class="keywordflow">else</span>00241 <span class="keywordflow">return</span> result;00242 }00243 <span class="keywordflow">else</span> {00244 <span class="keywordflow">if</span> ((x > 0) && (y < 0)) {00245 errno = ERANGE;00246 <span class="keywordflow">return</span> 0x7FFFFFFF;00247 }00248 <span class="keywordflow">else</span>00249 <span class="keywordflow">return</span> result;00250 }00251 }00252 <a name="l00266"></a><a class="code" href="group__fixed__math__fns.htm#ga11">00266</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga11">fixmul</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x, <a class="code" href="group__gdi__types.htm#ga10">fixed</a> y)00267 {00268 <span class="keywordflow">return</span> <a class="code" href="group__fixed__math__fns.htm#ga7">ftofix</a>(<a class="code" href="group__fixed__math__fns.htm#ga8">fixtof</a>(x) * <a class="code" href="group__fixed__math__fns.htm#ga8">fixtof</a>(y));00269 }00270 <a name="l00284"></a><a class="code" href="group__fixed__math__fns.htm#ga12">00284</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga12">fixdiv</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x, <a class="code" href="group__gdi__types.htm#ga10">fixed</a> y)00285 {00286 <span class="keywordflow">if</span> (y == 0) {00287 errno = ERANGE;00288 <span class="keywordflow">return</span> (x < 0) ? -0x7FFFFFFF : 0x7FFFFFFF;00289 }00290 <span class="keywordflow">else</span>00291 <span class="keywordflow">return</span> <a class="code" href="group__fixed__math__fns.htm#ga7">ftofix</a>(<a class="code" href="group__fixed__math__fns.htm#ga8">fixtof</a>(x) / <a class="code" href="group__fixed__math__fns.htm#ga8">fixtof</a>(y));00292 }00293 <a name="l00304"></a><a class="code" href="group__fixed__math__fns.htm#ga13">00304</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="group__fixed__math__fns.htm#ga13">fixceil</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x)00305 {00306 <span class="keywordflow">if</span> (x > 0x7FFF0000) {00307 errno = ERANGE;00308 <span class="keywordflow">return</span> 0x7FFF;00309 }00310 00311 x += 0xFFFF;00312 <span class="keywordflow">if</span> (x > 0)00313 <span class="keywordflow">return</span> (x >> 16);00314 <span class="keywordflow">else</span>00315 <span class="keywordflow">return</span> ~((~x) >> 16);00316 }00317 <a name="l00326"></a><a class="code" href="group__fixed__math__fns.htm#ga14">00326</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga14">itofix</a> (<span class="keywordtype">int</span> x)00327 { 00328 <span class="keywordflow">return</span> x << 16;00329 }00330 <a name="l00339"></a><a class="code" href="group__fixed__math__fns.htm#ga15">00339</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="group__fixed__math__fns.htm#ga15">fixtoi</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x)00340 { 00341 <span class="keywordflow">return</span> (x >> 16) + ((x & 0x8000) >> 15);00342 }00343 <a name="l00353"></a><a class="code" href="group__fixed__math__fns.htm#ga16">00353</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga16">fixcos</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x)00354 {00355 <span class="keywordflow">return</span> _cos_tbl[((x + 0x4000) >> 15) & 0x1FF];00356 }00357 <a name="l00367"></a><a class="code" href="group__fixed__math__fns.htm#ga17">00367</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga17">fixsin</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x)00368 { 00369 <span class="keywordflow">return</span> _cos_tbl[((x - 0x400000 + 0x4000) >> 15) & 0x1FF];00370 }00371 <a name="l00381"></a><a class="code" href="group__fixed__math__fns.htm#ga18">00381</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga18">fixtan</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x)00382 { 00383 <span class="keywordflow">return</span> _tan_tbl[((x + 0x4000) >> 15) & 0xFF];00384 }00385 <a name="l00399"></a><a class="code" href="group__fixed__math__fns.htm#ga19">00399</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga19">fixacos</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x)00400 {00401 <span class="keywordflow">if</span> ((x < -65536) || (x > 65536)) {00402 errno = EDOM;00403 <span class="keywordflow">return</span> 0;00404 }00405 00406 <span class="keywordflow">return</span> _acos_tbl[(x+65536+127)>>8];00407 }00408 <a name="l00422"></a><a class="code" href="group__fixed__math__fns.htm#ga20">00422</a> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__gdi__types.htm#ga10">fixed</a> <a class="code" href="group__fixed__math__fns.htm#ga20">fixasin</a> (<a class="code" href="group__gdi__types.htm#ga10">fixed</a> x)00423 { 00424 <span class="keywordflow">if</span> ((x < -65536) || (x > 65536)) {00425 errno = EDOM;00426 <span class="keywordflow">return</span> 0;00427 }00428 00429 <span class="keywordflow">return</span> 0x00400000 - _acos_tbl[(x+65536+127)>>8];00430 }00431 00439 <span class="preprocessor">#endif </span><span class="comment">/* _FIXED_MATH */</span>00440 00441 <span class="comment">/* Ends C function definitions when using C++ */</span>00442 <span class="preprocessor">#ifdef __cplusplus</span>00443 <span class="preprocessor"></span>}00444 <span class="preprocessor">#endif</span>00445 <span class="preprocessor"></span>00446 <span class="preprocessor">#endif </span><span class="comment">/* _MGUI_FIXED_MATH_H */</span>00447 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Nov 22 15:35:50 2007 for MiniGUI V1.6.10 API Reference by <a href="http://www.doxygen.org/index.html"><img src="http://www.minigui.com/api_ref/1.6.10/doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -