kspread

kspread_functions_trig.cpp
1/* This file is part of the KDE project
2 Copyright (C) 1998-2002 The KSpread Team
3 www.koffice.org/kspread
4 Copyright (C) 2005 Tomas Mecir <mecirt@gmail.com>
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20*/
21
22// built-in trigonometric functions
23
24#include "functions.h"
25#include "valuecalc.h"
26
27using namespace KSpread;
28
29// prototypes (sort alphabetically)
30Value func_acos (valVector args, ValueCalc *calc, FuncExtra *);
31Value func_acosh (valVector args, ValueCalc *calc, FuncExtra *);
32Value func_acot (valVector args, ValueCalc *calc, FuncExtra *);
33Value func_asinh (valVector args, ValueCalc *calc, FuncExtra *);
34Value func_asin (valVector args, ValueCalc *calc, FuncExtra *);
35Value func_atan (valVector args, ValueCalc *calc, FuncExtra *);
36Value func_atan2 (valVector args, ValueCalc *calc, FuncExtra *);
37Value func_atanh (valVector args, ValueCalc *calc, FuncExtra *);
38Value func_cos (valVector args, ValueCalc *calc, FuncExtra *);
39Value func_cosh (valVector args, ValueCalc *calc, FuncExtra *);
40Value func_degrees (valVector args, ValueCalc *calc, FuncExtra *);
41Value func_radians (valVector args, ValueCalc *calc, FuncExtra *);
42Value func_sin (valVector args, ValueCalc *calc, FuncExtra *);
43Value func_sinh (valVector args, ValueCalc *calc, FuncExtra *);
44Value func_tan (valVector args, ValueCalc *calc, FuncExtra *);
45Value func_tanh (valVector args, ValueCalc *calc, FuncExtra *);
46Value func_pi (valVector args, ValueCalc *calc, FuncExtra *);
47
48// registers all trigonometric functions
49void RegisterTrigFunctions()
50{
51 FunctionRepository* repo = FunctionRepository::self();
52 Function *f;
53
54 f = new Function ("ACOS", func_acos);
55 repo->add (f);
56 f = new Function ("ACOSH", func_acosh);
57 repo->add (f);
58 f = new Function ("ACOT", func_acot);
59 repo->add (f);
60 f = new Function ("ASIN", func_asin);
61 repo->add (f);
62 f = new Function ("ASINH", func_asinh);
63 repo->add (f);
64 f = new Function ("ATAN", func_atan);
65 repo->add (f);
66 f = new Function ("ATAN2", func_atan2);
67 f->setParamCount (2);
68 repo->add (f);
69 f = new Function ("ATANH", func_atanh);
70 repo->add (f);
71 f = new Function ("COS", func_cos);
72 repo->add (f);
73 f = new Function ("COSH", func_cosh);
74 repo->add (f);
75 f = new Function ("DEGREES",func_degrees);
76 repo->add (f);
77 f = new Function ("RADIANS",func_radians);
78 repo->add (f);
79 f = new Function ("SIN", func_sin);
80 repo->add (f);
81 f = new Function ("SINH", func_sinh);
82 repo->add (f);
83 f = new Function ("TAN", func_tan);
84 repo->add (f);
85 f = new Function ("TANH", func_tanh);
86 repo->add (f);
87 f = new Function ("PI", func_pi);
88 f->setParamCount (0);
89 repo->add (f);
90}
91
92// Function: sin
93Value func_sin (valVector args, ValueCalc *calc, FuncExtra *)
94{
95 return calc->sin (args[0]);
96}
97
98// Function: cos
99Value func_cos (valVector args, ValueCalc *calc, FuncExtra *)
100{
101 return calc->cos (args[0]);
102}
103
104// Function: tan
105Value func_tan (valVector args, ValueCalc *calc, FuncExtra *)
106{
107 return calc->tg (args[0]);
108}
109
110// Function: atan
111Value func_atan (valVector args, ValueCalc *calc, FuncExtra *)
112{
113 return calc->atg (args[0]);
114}
115
116// Function: asin
117Value func_asin (valVector args, ValueCalc *calc, FuncExtra *)
118{
119 return calc->asin (args[0]);
120}
121
122// Function: acos
123Value func_acos (valVector args, ValueCalc *calc, FuncExtra *)
124{
125 return calc->acos (args[0]);
126}
127
128Value func_acot (valVector args, ValueCalc *calc, FuncExtra *)
129{
130 // PI/2 - atg (val)
131 return calc->sub (calc->div (calc->pi(), 2), calc->atg (args[0]));
132}
133
134// Function: asinh
135Value func_asinh (valVector args, ValueCalc *calc, FuncExtra *)
136{
137 return calc->asinh (args[0]);
138}
139
140// Function: acosh
141Value func_acosh (valVector args, ValueCalc *calc, FuncExtra *)
142{
143 return calc->acosh (args[0]);
144}
145
146// Function: atanh
147Value func_atanh (valVector args, ValueCalc *calc, FuncExtra *)
148{
149 return calc->atgh (args[0]);
150}
151
152// Function: tanh
153Value func_tanh (valVector args, ValueCalc *calc, FuncExtra *)
154{
155 return calc->tgh (args[0]);
156}
157
158// Function: sinh
159Value func_sinh (valVector args, ValueCalc *calc, FuncExtra *)
160{
161 return calc->sinh (args[0]);
162}
163
164// Function: cosh
165Value func_cosh (valVector args, ValueCalc *calc, FuncExtra *)
166{
167 return calc->cosh (args[0]);
168}
169
170// Function: DEGREES
171Value func_degrees (valVector args, ValueCalc *calc, FuncExtra *)
172{
173 // val * 180 / pi
174 return calc->div (calc->mul (args[0], 180.0), calc->pi());
175}
176
177// Function: RADIANS
178Value func_radians (valVector args, ValueCalc *calc, FuncExtra *)
179{
180 // val * pi / 180
181 return calc->mul (calc->div (args[0], 180.0), calc->pi());
182}
183
184// Function: PI
185Value func_pi (valVector, ValueCalc *calc, FuncExtra *)
186{
187 return calc->pi();
188}
189
190// Function: atan2
191Value func_atan2 (valVector args, ValueCalc *calc, FuncExtra *)
192{
193 return calc->atan2 (args[1], args[0]);
194}
The ValueCalc class is used to perform all sorts of calculations.
Definition valuecalc.h:69
Value pi()
constants
Value sin(const Value &number)
goniometric functions
Value sinh(const Value &number)
hyperbolic functions
Provides a wrapper for cell value.
The KSpread namespace.
Definition commands.h:39