File: math_8h-source.html

package info (click to toggle)
libmpcdec 1.2.2-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 2,900 kB
  • ctags: 4,893
  • sloc: sh: 8,435; ansic: 2,735; cpp: 237; makefile: 88
file content (156 lines) | stat: -rw-r--r-- 16,820 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!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>libmpcdec: include/mpcdec/math.h Source File</title>
<link href="custom.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.4 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<div class="nav">
<a class="el" href="dir_000000.html">include</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_000001.html">mpcdec</a></div>
<h1>math.h</h1><a href="math_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">  Copyright (c) 2005, The Musepack Development Team</span>
<a name="l00003"></a>00003 <span class="comment">  All rights reserved.</span>
<a name="l00004"></a>00004 <span class="comment"></span>
<a name="l00005"></a>00005 <span class="comment">  Redistribution and use in source and binary forms, with or without</span>
<a name="l00006"></a>00006 <span class="comment">  modification, are permitted provided that the following conditions are</span>
<a name="l00007"></a>00007 <span class="comment">  met:</span>
<a name="l00008"></a>00008 <span class="comment"></span>
<a name="l00009"></a>00009 <span class="comment">  * Redistributions of source code must retain the above copyright</span>
<a name="l00010"></a>00010 <span class="comment">  notice, this list of conditions and the following disclaimer.</span>
<a name="l00011"></a>00011 <span class="comment"></span>
<a name="l00012"></a>00012 <span class="comment">  * Redistributions in binary form must reproduce the above</span>
<a name="l00013"></a>00013 <span class="comment">  copyright notice, this list of conditions and the following</span>
<a name="l00014"></a>00014 <span class="comment">  disclaimer in the documentation and/or other materials provided</span>
<a name="l00015"></a>00015 <span class="comment">  with the distribution.</span>
<a name="l00016"></a>00016 <span class="comment"></span>
<a name="l00017"></a>00017 <span class="comment">  * Neither the name of the The Musepack Development Team nor the</span>
<a name="l00018"></a>00018 <span class="comment">  names of its contributors may be used to endorse or promote</span>
<a name="l00019"></a>00019 <span class="comment">  products derived from this software without specific prior</span>
<a name="l00020"></a>00020 <span class="comment">  written permission.</span>
<a name="l00021"></a>00021 <span class="comment"></span>
<a name="l00022"></a>00022 <span class="comment">  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span>
<a name="l00023"></a>00023 <span class="comment">  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span>
<a name="l00024"></a>00024 <span class="comment">  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span>
<a name="l00025"></a>00025 <span class="comment">  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span>
<a name="l00026"></a>00026 <span class="comment">  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span>
<a name="l00027"></a>00027 <span class="comment">  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span>
<a name="l00028"></a>00028 <span class="comment">  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span>
<a name="l00029"></a>00029 <span class="comment">  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span>
<a name="l00030"></a>00030 <span class="comment">  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span>
<a name="l00031"></a>00031 <span class="comment">  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span>
<a name="l00032"></a>00032 <span class="comment">  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
<a name="l00033"></a>00033 <span class="comment">*/</span>
<a name="l00034"></a>00034 
<a name="l00037"></a>00037 
<a name="l00038"></a>00038 <span class="preprocessor">#ifndef _mpcdec_math_h_</span>
<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define _mpcdec_math_h_</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span>
<a name="l00041"></a>00041 <span class="comment">//#define MPC_FIXED_POINT</span>
<a name="l00042"></a>00042 
<a name="l00043"></a><a class="code" href="math_8h.html#a0">00043</a> <span class="preprocessor">#define MPC_FIXED_POINT_SHIFT 16</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span>
<a name="l00045"></a>00045 <span class="preprocessor">#ifdef MPC_FIXED_POINT</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span>
<a name="l00047"></a>00047 
<a name="l00048"></a>00048 <span class="preprocessor">#ifdef _WIN32_WCE</span>
<a name="l00049"></a>00049 <span class="preprocessor"></span>
<a name="l00050"></a>00050 <span class="preprocessor">#include &lt;cmnintrin.h&gt;</span>
<a name="l00051"></a>00051 
<a name="l00052"></a>00052 <span class="preprocessor">#define MPC_HAVE_MULHIGH</span>
<a name="l00053"></a>00053 <span class="preprocessor"></span>
<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
<a name="l00055"></a>00055 <span class="preprocessor"></span>
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 <span class="preprocessor">#define MPC_FIXED_POINT_SCALE_SHIFT (MPC_FIXED_POINT_SHIFT + MPC_FIXED_POINT_FRACTPART)</span>
<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define MPC_FIXED_POINT_SCALE (1 &lt;&lt; (MPC_FIXED_POINT_SCALE_SHIFT - 1))</span>
<a name="l00059"></a>00059 <span class="preprocessor"></span>
<a name="l00060"></a>00060 
<a name="l00061"></a>00061 <span class="comment">//in fixedpoint mode, results in decode output buffer are in -MPC_FIXED_POINT_SCALE ... MPC_FIXED_POINT_SCALE range</span>
<a name="l00062"></a>00062 
<a name="l00063"></a>00063 <span class="preprocessor">#define MPC_FIXED_POINT_FRACTPART 14</span>
<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="keyword">typedef</span> mpc_int32_t <a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a>;
<a name="l00065"></a>00065 
<a name="l00066"></a>00066 <span class="keyword">typedef</span> mpc_int64_t MPC_SAMPLE_FORMAT_MULTIPLY;
<a name="l00067"></a>00067 
<a name="l00068"></a>00068 <span class="preprocessor">#define MAKE_MPC_SAMPLE(X) (MPC_SAMPLE_FORMAT)((double)(X) * (double)(((mpc_int64_t)1)&lt;&lt;MPC_FIXED_POINT_FRACTPART))</span>
<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define MAKE_MPC_SAMPLE_EX(X,Y) (MPC_SAMPLE_FORMAT)((double)(X) * (double)(((mpc_int64_t)1)&lt;&lt;(Y)))</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span>
<a name="l00071"></a>00071 <span class="preprocessor">#define MPC_MULTIPLY_NOTRUNCATE(X,Y) \</span>
<a name="l00072"></a>00072 <span class="preprocessor">        (((MPC_SAMPLE_FORMAT_MULTIPLY)(X) * (MPC_SAMPLE_FORMAT_MULTIPLY)(Y)) &gt;&gt; MPC_FIXED_POINT_FRACTPART)</span>
<a name="l00073"></a>00073 <span class="preprocessor"></span>
<a name="l00074"></a>00074 <span class="preprocessor">#define MPC_MULTIPLY_EX_NOTRUNCATE(X,Y,Z) \</span>
<a name="l00075"></a>00075 <span class="preprocessor">        (((MPC_SAMPLE_FORMAT_MULTIPLY)(X) * (MPC_SAMPLE_FORMAT_MULTIPLY)(Y)) &gt;&gt; (Z))</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span>
<a name="l00077"></a>00077 <span class="preprocessor">#ifdef _DEBUG</span>
<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a> <a class="code" href="math_8h.html#a9">MPC_MULTIPLY</a>(<a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a> item1,<a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a> item2)
<a name="l00079"></a>00079 {
<a name="l00080"></a>00080         MPC_SAMPLE_FORMAT_MULTIPLY temp = MPC_MULTIPLY_NOTRUNCATE(item1,item2);
<a name="l00081"></a>00081         assert(temp == (MPC_SAMPLE_FORMAT_MULTIPLY)(<a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a>)temp);
<a name="l00082"></a>00082         <span class="keywordflow">return</span> (MPC_SAMPLE_FORMAT)temp;
<a name="l00083"></a>00083 }
<a name="l00084"></a>00084 
<a name="l00085"></a>00085 <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a> <a class="code" href="math_8h.html#a10">MPC_MULTIPLY_EX</a>(<a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a> item1,<a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a> item2,<span class="keywordtype">unsigned</span> shift)
<a name="l00086"></a>00086 {
<a name="l00087"></a>00087         MPC_SAMPLE_FORMAT_MULTIPLY temp = MPC_MULTIPLY_EX_NOTRUNCATE(item1,item2,shift);
<a name="l00088"></a>00088         assert(temp == (MPC_SAMPLE_FORMAT_MULTIPLY)(<a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a>)temp);
<a name="l00089"></a>00089         <span class="keywordflow">return</span> (<a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a>)temp;
<a name="l00090"></a>00090 }
<a name="l00091"></a>00091 
<a name="l00092"></a>00092 <span class="preprocessor">#else</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span>
<a name="l00094"></a>00094 <span class="preprocessor">#define MPC_MULTIPLY(X,Y) ((MPC_SAMPLE_FORMAT)MPC_MULTIPLY_NOTRUNCATE(X,Y))</span>
<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_EX(X,Y,Z) ((MPC_SAMPLE_FORMAT)MPC_MULTIPLY_EX_NOTRUNCATE(X,Y,Z))</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span>
<a name="l00097"></a>00097 <span class="preprocessor">#endif</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span>
<a name="l00099"></a>00099 <span class="preprocessor">#ifdef MPC_HAVE_MULHIGH</span>
<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_FRACT(X,Y) _MulHigh(X,Y)</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_FRACT(X,Y) MPC_MULTIPLY_EX(X,Y,32)</span>
<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00104"></a>00104 <span class="preprocessor"></span>
<a name="l00105"></a>00105 <span class="preprocessor">#define MPC_MAKE_FRACT_CONST(X) (MPC_SAMPLE_FORMAT)((X) * (double)(((mpc_int64_t)1)&lt;&lt;32) )</span>
<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_FRACT_CONST(X,Y) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST(Y))</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_FRACT_CONST_FIX(X,Y,Z) ( MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST( Y / (1&lt;&lt;(Z)) )) &lt;&lt; (Z) )</span>
<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_FRACT_CONST_SHR(X,Y,Z) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST( Y / (1&lt;&lt;(Z)) ))</span>
<a name="l00109"></a>00109 <span class="preprocessor"></span>
<a name="l00110"></a>00110 <span class="preprocessor">#define MPC_MULTIPLY_FLOAT_INT(X,Y) ((X)*(Y))</span>
<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#define MPC_SCALE_CONST(X,Y,Z) MPC_MULTIPLY_EX(X,MAKE_MPC_SAMPLE_EX(Y,Z),(Z))</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#define MPC_SCALE_CONST_SHL(X,Y,Z,S) MPC_MULTIPLY_EX(X,MAKE_MPC_SAMPLE_EX(Y,Z),(Z)-(S))</span>
<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#define MPC_SCALE_CONST_SHR(X,Y,Z,S) MPC_MULTIPLY_EX(X,MAKE_MPC_SAMPLE_EX(Y,Z),(Z)+(S))</span>
<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">#define MPC_SHR(X,Y) ((X)&gt;&gt;(Y))</span>
<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#define MPC_SHL(X,Y) ((X)&lt;&lt;(Y))</span>
<a name="l00116"></a>00116 <span class="preprocessor"></span>
<a name="l00117"></a>00117 <span class="preprocessor">#else</span>
<a name="l00118"></a>00118 <span class="preprocessor"></span>
<a name="l00119"></a>00119 <span class="comment">//in floating-point mode, decoded samples are in -1...1 range</span>
<a name="l00120"></a>00120 
<a name="l00121"></a><a class="code" href="math_8h.html#a16">00121</a> <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="math_8h.html#a16">MPC_SAMPLE_FORMAT</a>;
<a name="l00122"></a>00122 
<a name="l00123"></a><a class="code" href="math_8h.html#a1">00123</a> <span class="preprocessor">#define MAKE_MPC_SAMPLE(X) ((MPC_SAMPLE_FORMAT)(X))</span>
<a name="l00124"></a><a class="code" href="math_8h.html#a2">00124</a> <span class="preprocessor"></span><span class="preprocessor">#define MAKE_MPC_SAMPLE_EX(X,Y) ((MPC_SAMPLE_FORMAT)(X))</span>
<a name="l00125"></a>00125 <span class="preprocessor"></span>
<a name="l00126"></a><a class="code" href="math_8h.html#a3">00126</a> <span class="preprocessor">#define MPC_MULTIPLY_FRACT(X,Y) ((X)*(Y))</span>
<a name="l00127"></a><a class="code" href="math_8h.html#a4">00127</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_MAKE_FRACT_CONST(X) (X)</span>
<a name="l00128"></a><a class="code" href="math_8h.html#a5">00128</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_FRACT_CONST(X,Y) MPC_MULTPLY_FRACT(X,MPC_MAKE_FRACT_CONST(Y))</span>
<a name="l00129"></a><a class="code" href="math_8h.html#a6">00129</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_FRACT_CONST_SHR(X,Y,Z) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST( Y ))</span>
<a name="l00130"></a><a class="code" href="math_8h.html#a7">00130</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_FRACT_CONST_FIX(X,Y,Z) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST( Y ))</span>
<a name="l00131"></a>00131 <span class="preprocessor"></span>
<a name="l00132"></a><a class="code" href="math_8h.html#a8">00132</a> <span class="preprocessor">#define MPC_MULTIPLY_FLOAT_INT(X,Y) ((X)*(Y))</span>
<a name="l00133"></a><a class="code" href="math_8h.html#a9">00133</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY(X,Y) ((X)*(Y))</span>
<a name="l00134"></a><a class="code" href="math_8h.html#a10">00134</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_MULTIPLY_EX(X,Y,Z) ((X)*(Y))</span>
<a name="l00135"></a><a class="code" href="math_8h.html#a11">00135</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_SCALE_CONST(X,Y,Z) ((X)*(Y))</span>
<a name="l00136"></a><a class="code" href="math_8h.html#a12">00136</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_SCALE_CONST_SHL(X,Y,Z,S) ((X)*(Y))</span>
<a name="l00137"></a><a class="code" href="math_8h.html#a13">00137</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_SCALE_CONST_SHR(X,Y,Z,S) ((X)*(Y))</span>
<a name="l00138"></a><a class="code" href="math_8h.html#a14">00138</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_SHR(X,Y) (X)</span>
<a name="l00139"></a><a class="code" href="math_8h.html#a15">00139</a> <span class="preprocessor"></span><span class="preprocessor">#define MPC_SHL(X,Y) (X)</span>
<a name="l00140"></a>00140 <span class="preprocessor"></span>
<a name="l00141"></a>00141 <span class="preprocessor">#endif</span>
<a name="l00142"></a>00142 <span class="preprocessor"></span>
<a name="l00143"></a>00143 <span class="preprocessor">#endif // _mpcdec_math_h_</span>
<a name="l00144"></a>00144 <span class="preprocessor"></span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Oct 23 16:35:24 2005 for libmpcdec by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
</body>
</html>