1 /*
2 * Medical Image Registration ToolKit (MIRTK)
3 *
4 * Copyright 2008-2015 Imperial College London
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19
20 #include "mirtk/Math.h"
21 #include "mirtk/Arith.h"
22
23 using namespace std;
24
25
26 namespace mirtk {
27
28
29 //----------------------------------------------------------------------------
IAbs(int iValue)30 int IAbs(int iValue)
31 {
32 return ( iValue >= 0 ? iValue : -iValue );
33 }
34
35 //----------------------------------------------------------------------------
ICeil(float fValue)36 int ICeil(float fValue)
37 {
38 return int(ceil(fValue));
39 }
40
41 //----------------------------------------------------------------------------
IFloor(float fValue)42 int IFloor(float fValue)
43 {
44 return int(floor(fValue));
45 }
46
47 //----------------------------------------------------------------------------
ISign(int iValue)48 int ISign(int iValue)
49 {
50 return ( iValue > 0 ? +1 : ( iValue < 0 ? -1 : 0 ) );
51 }
52
53 //----------------------------------------------------------------------------
Abs(double fValue)54 double Abs(double fValue)
55 {
56 return double(fabs(fValue));
57 }
58
59 //----------------------------------------------------------------------------
ACos(double fValue)60 double ACos(double fValue)
61 {
62 if ( -1.0 < fValue ) {
63 if ( fValue < 1.0 )
64 return double(acos(fValue));
65 else
66 return 0.0;
67 } else {
68 return pi;
69 }
70 }
71
72 //----------------------------------------------------------------------------
ASin(double fValue)73 double ASin(double fValue)
74 {
75 if ( -1.0 < fValue ) {
76 if ( fValue < 1.0 )
77 return double(asin(fValue));
78 else
79 return -pi_half;
80 } else {
81 return pi_half;
82 }
83 }
84
85 //----------------------------------------------------------------------------
ATan(double fValue)86 double ATan (double fValue)
87 {
88 return double(atan(fValue));
89 }
90
91 //----------------------------------------------------------------------------
ATan2(double fY,double fX)92 double ATan2(double fY, double fX)
93 {
94 return double(atan2(fY,fX));
95 }
96
97 //----------------------------------------------------------------------------
Ceil(double fValue)98 double Ceil(double fValue)
99 {
100 return double(ceil(fValue));
101 }
102
103 //----------------------------------------------------------------------------
Cos(double fValue)104 double Cos(double fValue)
105 {
106 return double(cos(fValue));
107 }
108
109 //----------------------------------------------------------------------------
Exp(double fValue)110 double Exp(double fValue)
111 {
112 return double(exp(fValue));
113 }
114
115 //----------------------------------------------------------------------------
Floor(double fValue)116 double Floor(double fValue)
117 {
118 return double(floor(fValue));
119 }
120
121 //----------------------------------------------------------------------------
Log(double fValue)122 double Log(double fValue)
123 {
124 return double(log(fValue));
125 }
126
127 //----------------------------------------------------------------------------
Pow(double fBase,double fExponent)128 double Pow(double fBase, double fExponent)
129 {
130 return double(pow(fBase, fExponent));
131 }
132
133 //----------------------------------------------------------------------------
Sign(double fValue)134 double Sign(double fValue)
135 {
136 if ( fValue > 0.0 )
137 return 1.0;
138
139 if ( fValue < 0.0 )
140 return -1.0;
141
142 return 0.0;
143 }
144
145 //----------------------------------------------------------------------------
Sin(double fValue)146 double Sin(double fValue)
147 {
148 return double(sin(fValue));
149 }
150
151 //----------------------------------------------------------------------------
Sqr(double fValue)152 double Sqr(double fValue)
153 {
154 return fValue*fValue;
155 }
156
157 //----------------------------------------------------------------------------
Sqrt(double fValue)158 double Sqrt(double fValue)
159 {
160 return double(sqrt(fValue));
161 }
162
163 //----------------------------------------------------------------------------
UnitRandom()164 double UnitRandom()
165 {
166 return double(rand())/double(RAND_MAX);
167 }
168
169 //----------------------------------------------------------------------------
SymmetricRandom()170 double SymmetricRandom()
171 {
172 return 2.0*double(rand())/double(RAND_MAX) - 1.0;
173 }
174
175
176 } // namespace mirtk
177