⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fixedmath_8h-source.htm

📁 MINIGUI1.6开发API
💻 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&nbsp;Page</a> | <a class="qindex" href="modules.htm">Modules</a> | <a class="qindex" href="classes.htm">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.htm">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.htm">Directories</a> | <a class="qindex" href="files.htm">File&nbsp;List</a> | <a class="qindex" href="functions.htm">Data&nbsp;Fields</a> | <a class="qindex" href="globals.htm">Globals</a> | <a class="qindex" href="pages.htm">Related&nbsp;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 &lt;errno.h&gt;</span>00038 <span class="preprocessor">#include &lt;math.h&gt;</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 &gt; 32767.0) {00153       errno = ERANGE;00154       <span class="keywordflow">return</span> 0x7FFFFFFF;00155    }00156 00157    <span class="keywordflow">if</span> (x &lt; -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 &lt; 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 &gt;= 0) {00199       <span class="keywordflow">if</span> ((x &lt; 0) &amp;&amp; (y &lt; 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 &gt; 0) &amp;&amp; (y &gt; 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 &gt;= 0) {00236       <span class="keywordflow">if</span> ((x &lt; 0) &amp;&amp; (y &gt; 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 &gt; 0) &amp;&amp; (y &lt; 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 &lt; 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 &gt; 0x7FFF0000) {00307       errno = ERANGE;00308       <span class="keywordflow">return</span> 0x7FFF;00309    }00310 00311    x += 0xFFFF;00312    <span class="keywordflow">if</span> (x &gt; 0)00313        <span class="keywordflow">return</span> (x &gt;&gt; 16);00314    <span class="keywordflow">else</span>00315        <span class="keywordflow">return</span> ~((~x) &gt;&gt; 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 &lt;&lt; 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 &gt;&gt; 16) + ((x &amp; 0x8000) &gt;&gt; 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) &gt;&gt; 15) &amp; 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) &gt;&gt; 15) &amp; 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) &gt;&gt; 15) &amp; 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 &lt; -65536) || (x &gt; 65536)) {00402       errno = EDOM;00403       <span class="keywordflow">return</span> 0;00404    }00405 00406    <span class="keywordflow">return</span> _acos_tbl[(x+65536+127)&gt;&gt;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 &lt; -65536) || (x &gt; 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)&gt;&gt;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&nbsp;<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 + -