Skip to content

Commit a035ce3

Browse files
committed
Merge pull request #1 from spfrommer/master
Added trigonometric, hyperbolic, power, and error/gamma functions
2 parents d1e40ba + f715f1a commit a035ce3

File tree

1 file changed

+236
-1
lines changed

1 file changed

+236
-1
lines changed

include/chaiscript/extras/math.hpp

Lines changed: 236 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
#include <cmath>
2+
#include <memory>
3+
4+
#include "../dispatchkit/dispatchkit.hpp"
5+
#include "../chaiscript.hpp"
26

37
namespace chaiscript {
48
namespace extras {
@@ -8,7 +12,154 @@ namespace chaiscript {
812
{
913
// using the overloads provided by C++11
1014
// http://www.cplusplus.com/reference/cmath/floor/
11-
m->add(chaiscript::fun(static_cast<Ret (Param)>(&std::floor)), "floor");
15+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::floor)), "floor");
16+
return m;
17+
}
18+
19+
template<typename Ret, typename Param>
20+
ModulePtr cos(ModulePtr m = std::make_shared<Module>())
21+
{
22+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::cos)), "cos");
23+
return m;
24+
}
25+
26+
template<typename Ret, typename Param>
27+
ModulePtr sin(ModulePtr m = std::make_shared<Module>())
28+
{
29+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::sin)), "sin");
30+
return m;
31+
}
32+
33+
template<typename Ret, typename Param>
34+
ModulePtr tan(ModulePtr m = std::make_shared<Module>())
35+
{
36+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::tan)), "tan");
37+
return m;
38+
}
39+
40+
template<typename Ret, typename Param>
41+
ModulePtr acos(ModulePtr m = std::make_shared<Module>())
42+
{
43+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::acos)), "acos");
44+
return m;
45+
}
46+
47+
template<typename Ret, typename Param>
48+
ModulePtr asin(ModulePtr m = std::make_shared<Module>())
49+
{
50+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::asin)), "asin");
51+
return m;
52+
}
53+
54+
template<typename Ret, typename Param>
55+
ModulePtr atan(ModulePtr m = std::make_shared<Module>())
56+
{
57+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::atan)), "atan");
58+
return m;
59+
}
60+
61+
template<typename Ret, typename Param1, typename Param2>
62+
ModulePtr atan2(ModulePtr m = std::make_shared<Module>())
63+
{
64+
m->add(chaiscript::fun(static_cast<Ret (*)(Param1, Param2)>(&std::atan2)), "atan2");
65+
return m;
66+
}
67+
68+
template<typename Ret, typename Param>
69+
ModulePtr cosh(ModulePtr m = std::make_shared<Module>())
70+
{
71+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::cosh)), "cosh");
72+
return m;
73+
}
74+
75+
template<typename Ret, typename Param>
76+
ModulePtr sinh(ModulePtr m = std::make_shared<Module>())
77+
{
78+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::sinh)), "sinh");
79+
return m;
80+
}
81+
82+
template<typename Ret, typename Param>
83+
ModulePtr tanh(ModulePtr m = std::make_shared<Module>())
84+
{
85+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::tanh)), "tanh");
86+
return m;
87+
}
88+
89+
template<typename Ret, typename Param>
90+
ModulePtr acosh(ModulePtr m = std::make_shared<Module>())
91+
{
92+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::acosh)), "acosh");
93+
return m;
94+
}
95+
96+
template<typename Ret, typename Param>
97+
ModulePtr asinh(ModulePtr m = std::make_shared<Module>())
98+
{
99+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::asinh)), "asinh");
100+
return m;
101+
}
102+
103+
template<typename Ret, typename Param>
104+
ModulePtr atanh(ModulePtr m = std::make_shared<Module>())
105+
{
106+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::atanh)), "atanh");
107+
return m;
108+
}
109+
110+
template<typename Ret, typename Param1, typename Param2>
111+
ModulePtr pow(ModulePtr m = std::make_shared<Module>())
112+
{
113+
m->add(chaiscript::fun(static_cast<Ret (*)(Param1, Param2)>(&std::pow)), "pow");
114+
return m;
115+
}
116+
117+
template<typename Ret, typename Param>
118+
ModulePtr sqrt(ModulePtr m = std::make_shared<Module>())
119+
{
120+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::sqrt)), "sqrt");
121+
return m;
122+
}
123+
124+
template<typename Ret, typename Param>
125+
ModulePtr cbrt(ModulePtr m = std::make_shared<Module>())
126+
{
127+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::cbrt)), "cbrt");
128+
return m;
129+
}
130+
131+
template<typename Ret, typename Param1, typename Param2>
132+
ModulePtr hypot(ModulePtr m = std::make_shared<Module>())
133+
{
134+
m->add(chaiscript::fun(static_cast<Ret (*)(Param1, Param2)>(&std::hypot)), "hypot");
135+
return m;
136+
}
137+
138+
template<typename Ret, typename Param>
139+
ModulePtr erf(ModulePtr m = std::make_shared<Module>())
140+
{
141+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::erf)), "erf");
142+
return m;
143+
}
144+
145+
template<typename Ret, typename Param>
146+
ModulePtr erfc(ModulePtr m = std::make_shared<Module>())
147+
{
148+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::erfc)), "erfc");
149+
return m;
150+
}
151+
152+
template<typename Ret, typename Param>
153+
ModulePtr tgamma(ModulePtr m = std::make_shared<Module>())
154+
{
155+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::tgamma)), "tgamma");
156+
return m;
157+
}
158+
159+
template<typename Ret, typename Param>
160+
ModulePtr lgamma(ModulePtr m = std::make_shared<Module>())
161+
{
162+
m->add(chaiscript::fun(static_cast<Ret (*)(Param)>(&std::lgamma)), "lgamma");
12163
return m;
13164
}
14165

@@ -18,6 +169,90 @@ namespace chaiscript {
18169
floor<long double, long double>(m);
19170
floor<float, float>(m);
20171

172+
cos<double, double>(m);
173+
cos<float, float>(m);
174+
cos<long double, long double>(m);
175+
176+
sin<double, double>(m);
177+
sin<float, float>(m);
178+
sin<long double, long double>(m);
179+
180+
tan<double, double>(m);
181+
tan<float, float>(m);
182+
tan<long double, long double>(m);
183+
184+
acos<double, double>(m);
185+
acos<float, float>(m);
186+
acos<long double, long double>(m);
187+
188+
asin<double, double>(m);
189+
asin<float, float>(m);
190+
asin<long double, long double>(m);
191+
192+
atan<double, double>(m);
193+
atan<float, float>(m);
194+
atan<long double, long double>(m);
195+
196+
atan2<double, double, double>(m);
197+
atan2<float, float, float>(m);
198+
atan2<long double, long double, long double>(m);
199+
200+
cosh<double, double>(m);
201+
cosh<float, float>(m);
202+
cosh<long double, long double>(m);
203+
204+
sinh<double, double>(m);
205+
sinh<float, float>(m);
206+
sinh<long double, long double>(m);
207+
208+
tanh<double, double>(m);
209+
tanh<float, float>(m);
210+
tanh<long double, long double>(m);
211+
212+
acosh<double, double>(m);
213+
acosh<float, float>(m);
214+
acosh<long double, long double>(m);
215+
216+
asinh<double, double>(m);
217+
asinh<float, float>(m);
218+
asinh<long double, long double>(m);
219+
220+
atanh<double, double>(m);
221+
atanh<float, float>(m);
222+
atanh<long double, long double>(m);
223+
224+
pow<double, double, double>(m);
225+
pow<float, float, float>(m);
226+
pow<long double, long double, long double>(m);
227+
228+
sqrt<double, double>(m);
229+
sqrt<float, float>(m);
230+
sqrt<long double, long double>(m);
231+
232+
cbrt<double, double>(m);
233+
cbrt<float, float>(m);
234+
cbrt<long double, long double>(m);
235+
236+
hypot<double, double, double>(m);
237+
hypot<float, float, float>(m);
238+
hypot<long double, long double, long double>(m);
239+
240+
erf<double, double>(m);
241+
erf<float, float>(m);
242+
erf<long double, long double>(m);
243+
244+
erfc<double, double>(m);
245+
erfc<float, float>(m);
246+
erfc<long double, long double>(m);
247+
248+
tgamma<double, double>(m);
249+
tgamma<float, float>(m);
250+
tgamma<long double, long double>(m);
251+
252+
lgamma<double, double>(m);
253+
lgamma<float, float>(m);
254+
lgamma<long double, long double>(m);
255+
21256
return m;
22257
}
23258
}

0 commit comments

Comments
 (0)