kspread

kspread_functions_trig.cc

00001 /* This file is part of the KDE project
00002    Copyright (C) 1998-2002 The KSpread Team
00003                            www.koffice.org/kspread
00004    Copyright (C) 2005 Tomas Mecir <mecirt@gmail.com>
00005 
00006    This library is free software; you can redistribute it and/or
00007    modify it under the terms of the GNU Library General Public
00008    License as published by the Free Software Foundation; either
00009    version 2 of the License.
00010 
00011    This library is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014    Library General Public License for more details.
00015 
00016    You should have received a copy of the GNU Library General Public License
00017    along with this library; see the file COPYING.LIB.  If not, write to
00018    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019  * Boston, MA 02110-1301, USA.
00020 */
00021 
00022 // built-in trigonometric functions
00023 
00024 #include "functions.h"
00025 #include "valuecalc.h"
00026 
00027 using namespace KSpread;
00028 
00029 // prototypes (sort alphabetically)
00030 Value func_acos (valVector args, ValueCalc *calc, FuncExtra *);
00031 Value func_acosh (valVector args, ValueCalc *calc, FuncExtra *);
00032 Value func_acot (valVector args, ValueCalc *calc, FuncExtra *);
00033 Value func_asinh (valVector args, ValueCalc *calc, FuncExtra *);
00034 Value func_asin (valVector args, ValueCalc *calc, FuncExtra *);
00035 Value func_atan (valVector args, ValueCalc *calc, FuncExtra *);
00036 Value func_atan2 (valVector args, ValueCalc *calc, FuncExtra *);
00037 Value func_atanh (valVector args, ValueCalc *calc, FuncExtra *);
00038 Value func_cos (valVector args, ValueCalc *calc, FuncExtra *);
00039 Value func_cosh (valVector args, ValueCalc *calc, FuncExtra *);
00040 Value func_degrees (valVector args, ValueCalc *calc, FuncExtra *);
00041 Value func_radians (valVector args, ValueCalc *calc, FuncExtra *);
00042 Value func_sin (valVector args, ValueCalc *calc, FuncExtra *);
00043 Value func_sinh (valVector args, ValueCalc *calc, FuncExtra *);
00044 Value func_tan (valVector args, ValueCalc *calc, FuncExtra *);
00045 Value func_tanh (valVector args, ValueCalc *calc, FuncExtra *);
00046 Value func_pi (valVector args, ValueCalc *calc, FuncExtra *);
00047 
00048 // registers all trigonometric functions
00049 void RegisterTrigFunctions()
00050 {
00051   FunctionRepository* repo = FunctionRepository::self();
00052   Function *f;
00053 
00054   f = new Function ("ACOS",   func_acos);
00055   repo->add (f);
00056   f = new Function ("ACOSH",  func_acosh);
00057   repo->add (f);
00058   f = new Function ("ACOT",   func_acot);
00059   repo->add (f);
00060   f = new Function ("ASIN",   func_asin);
00061   repo->add (f);
00062   f = new Function ("ASINH",  func_asinh);
00063   repo->add (f);
00064   f = new Function ("ATAN",   func_atan);
00065   repo->add (f);
00066   f = new Function ("ATAN2",  func_atan2);
00067   f->setParamCount (2);
00068   repo->add (f);
00069   f = new Function ("ATANH",  func_atanh);
00070   repo->add (f);
00071   f = new Function ("COS",    func_cos);
00072   repo->add (f);
00073   f = new Function ("COSH",   func_cosh);
00074   repo->add (f);
00075   f = new Function ("DEGREES",func_degrees);
00076   repo->add (f);
00077   f = new Function ("RADIANS",func_radians);
00078   repo->add (f);
00079   f = new Function ("SIN",    func_sin);
00080   repo->add (f);
00081   f = new Function ("SINH",   func_sinh);
00082   repo->add (f);
00083   f = new Function ("TAN",    func_tan);
00084   repo->add (f);
00085   f = new Function ("TANH",   func_tanh);
00086   repo->add (f);
00087   f = new Function ("PI",     func_pi);
00088   f->setParamCount (0);
00089   repo->add (f);
00090 }
00091 
00092 // Function: sin
00093 Value func_sin (valVector args, ValueCalc *calc, FuncExtra *)
00094 {
00095   return calc->sin (args[0]);
00096 }
00097 
00098 // Function: cos
00099 Value func_cos (valVector args, ValueCalc *calc, FuncExtra *)
00100 {
00101   return calc->cos (args[0]);
00102 }
00103 
00104 // Function: tan
00105 Value func_tan (valVector args, ValueCalc *calc, FuncExtra *)
00106 {
00107   return calc->tg (args[0]);
00108 }
00109 
00110 // Function: atan
00111 Value func_atan (valVector args, ValueCalc *calc, FuncExtra *)
00112 {
00113   return calc->atg (args[0]);
00114 }
00115 
00116 // Function: asin
00117 Value func_asin (valVector args, ValueCalc *calc, FuncExtra *)
00118 {
00119   return calc->asin (args[0]);
00120 }
00121 
00122 // Function: acos
00123 Value func_acos (valVector args, ValueCalc *calc, FuncExtra *)
00124 {
00125   return calc->acos (args[0]);
00126 }
00127 
00128 Value func_acot (valVector args, ValueCalc *calc, FuncExtra *)
00129 {
00130   // PI/2 - atg (val)
00131   return calc->sub (calc->div (calc->pi(), 2), calc->atg (args[0]));
00132 }
00133 
00134 // Function: asinh
00135 Value func_asinh (valVector args, ValueCalc *calc, FuncExtra *)
00136 {
00137   return calc->asinh (args[0]);
00138 }
00139 
00140 // Function: acosh
00141 Value func_acosh (valVector args, ValueCalc *calc, FuncExtra *)
00142 {
00143   return calc->acosh (args[0]);
00144 }
00145 
00146 // Function: atanh
00147 Value func_atanh (valVector args, ValueCalc *calc, FuncExtra *)
00148 {
00149   return calc->atgh (args[0]);
00150 }
00151 
00152 // Function: tanh
00153 Value func_tanh (valVector args, ValueCalc *calc, FuncExtra *)
00154 {
00155   return calc->tgh (args[0]);
00156 }
00157 
00158 // Function: sinh
00159 Value func_sinh (valVector args, ValueCalc *calc, FuncExtra *)
00160 {
00161   return calc->sinh (args[0]);
00162 }
00163 
00164 // Function: cosh
00165 Value func_cosh (valVector args, ValueCalc *calc, FuncExtra *)
00166 {
00167   return calc->cosh (args[0]);
00168 }
00169 
00170 // Function: DEGREES
00171 Value func_degrees (valVector args, ValueCalc *calc, FuncExtra *)
00172 {
00173   // val * 180 / pi
00174   return calc->div (calc->mul (args[0], 180.0), calc->pi());
00175 }
00176 
00177 // Function: RADIANS
00178 Value func_radians (valVector args, ValueCalc *calc, FuncExtra *)
00179 {
00180   // val * pi / 180
00181   return calc->mul (calc->div (args[0], 180.0), calc->pi());
00182 }
00183 
00184 // Function: PI
00185 Value func_pi (valVector, ValueCalc *calc, FuncExtra *)
00186 {
00187   return calc->pi();
00188 }
00189 
00190 // Function: atan2
00191 Value func_atan2 (valVector args, ValueCalc *calc, FuncExtra *)
00192 {
00193   return calc->atan2 (args[1], args[0]);
00194 }
KDE Home | KDE Accessibility Home | Description of Access Keys