summaryrefslogtreecommitdiff
path: root/scaddins
diff options
context:
space:
mode:
authorRegina Henschel <rb.henschel@t-online.de>2012-06-09 17:34:38 +0200
committerEike Rathke <erack@redhat.com>2012-06-12 23:55:48 +0200
commite659fbd2779d1f3e6f871a2405db173c5f70d320 (patch)
tree54314fc5ea379a88bf28c960cb130615a133da2a /scaddins
parent3174c0234bd9fdbbd182d05e86a2699e239f7f68 (diff)
fdo#51017 ODFF: implement missing imaginary functions [AOO i111609 r1348096]
Adds IMTAN, IMSEC, IMCSC, IMCOT, IMSINH, IMCOSH, IMSECH, IMCSCH spreadsheet functions. Change-Id: I04ce0b1fdf787c3d8b2301cd92400e54049494bf
Diffstat (limited to 'scaddins')
-rw-r--r--scaddins/idl/com/sun/star/sheet/addin/XAnalysis.idl32
-rw-r--r--scaddins/source/analysis/analysis.cxx80
-rw-r--r--scaddins/source/analysis/analysis.hrc27
-rw-r--r--scaddins/source/analysis/analysis.hxx8
-rw-r--r--scaddins/source/analysis/analysis.src144
-rw-r--r--scaddins/source/analysis/analysis_deffuncnames.src72
-rw-r--r--scaddins/source/analysis/analysis_funcnames.src40
-rw-r--r--scaddins/source/analysis/analysishelper.cxx172
-rw-r--r--scaddins/source/analysis/analysishelper.hxx13
9 files changed, 575 insertions, 13 deletions
diff --git a/scaddins/idl/com/sun/star/sheet/addin/XAnalysis.idl b/scaddins/idl/com/sun/star/sheet/addin/XAnalysis.idl
index 1cb001851aaf..daae62b9da83 100644
--- a/scaddins/idl/com/sun/star/sheet/addin/XAnalysis.idl
+++ b/scaddins/idl/com/sun/star/sheet/addin/XAnalysis.idl
@@ -321,6 +321,38 @@ module addin
string getImsqrt( [in] string Num )
raises( com::sun::star::lang::IllegalArgumentException );
+ /// imtan.
+ string getImtan( [in] string Num )
+ raises( com::sun::star::lang::IllegalArgumentException );
+
+ /// imsec.
+ string getImsec( [in] string Num)
+ raises( com::sun::star::lang::IllegalArgumentException );
+
+ /// imcsc.
+ string getImcsc( [in] string Num )
+ raises( com::sun::star::lang::IllegalArgumentException );
+
+ /// imcot.
+ string getImcot( [in] string Num )
+ raises( com::sun::star::lang::IllegalArgumentException );
+
+ /// imsinh.
+ string getImsinh( [in] string Num )
+ raises( com::sun::star::lang::IllegalArgumentException );
+
+ /// imcosh.
+ string getImcosh( [in] string Num )
+ raises( com::sun::star::lang::IllegalArgumentException );
+
+ /// imsech.
+ string getImsech( [in] string Num)
+ raises( com::sun::star::lang::IllegalArgumentException );
+
+ /// imcsch.
+ string getImcsch( [in] string Num )
+ raises( com::sun::star::lang::IllegalArgumentException );
+
/// complex.
string getComplex( [in] double Real, [in] double Imaginary, [in] any Suffix )
raises( com::sun::star::lang::IllegalArgumentException );
diff --git a/scaddins/source/analysis/analysis.cxx b/scaddins/source/analysis/analysis.cxx
index e62265f0a252..2215f28340d2 100644
--- a/scaddins/source/analysis/analysis.cxx
+++ b/scaddins/source/analysis/analysis.cxx
@@ -1215,6 +1215,86 @@ STRING SAL_CALL AnalysisAddIn::getImsqrt( const STRING& aNum ) THROWDEF_RTE_IAE
}
+STRING SAL_CALL AnalysisAddIn::getImtan( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+ Complex z( aNum );
+
+ z.Tan();
+
+ return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImsec( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+ Complex z( aNum );
+
+ z.Sec();
+
+ return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImcsc( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+ Complex z( aNum );
+
+ z.Csc();
+
+ return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImcot( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+ Complex z( aNum );
+
+ z.Cot();
+
+ return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImsinh( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+ Complex z( aNum );
+
+ z.Sinh();
+
+ return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImcosh( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+ Complex z( aNum );
+
+ z.Cosh();
+
+ return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImsech( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+ Complex z( aNum );
+
+ z.Sech();
+
+ return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImcsch( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+ Complex z( aNum );
+
+ z.Csch();
+
+ return z.GetString();
+}
+
+
STRING SAL_CALL AnalysisAddIn::getComplex( double fR, double fI, const ANY& rSuff ) THROWDEF_RTE_IAE
{
sal_Bool bi;
diff --git a/scaddins/source/analysis/analysis.hrc b/scaddins/source/analysis/analysis.hrc
index 7b5b94ff178c..d53eb1e2f7e5 100644
--- a/scaddins/source/analysis/analysis.hrc
+++ b/scaddins/source/analysis/analysis.hrc
@@ -131,7 +131,14 @@
#define ANALYSIS_Couppcd (ANALYSIS_FUNCDESC_START+90)
#define ANALYSIS_Coupnum (ANALYSIS_FUNCDESC_START+91)
#define ANALYSIS_Fvschedule (ANALYSIS_FUNCDESC_START+92)
-
+#define ANALYSIS_Imtan (ANALYSIS_FUNCDESC_START+93)
+#define ANALYSIS_Imsec (ANALYSIS_FUNCDESC_START+94)
+#define ANALYSIS_Imcsc (ANALYSIS_FUNCDESC_START+95)
+#define ANALYSIS_Imcot (ANALYSIS_FUNCDESC_START+96)
+#define ANALYSIS_Imsinh (ANALYSIS_FUNCDESC_START+97)
+#define ANALYSIS_Imcosh (ANALYSIS_FUNCDESC_START+98)
+#define ANALYSIS_Imsech (ANALYSIS_FUNCDESC_START+99)
+#define ANALYSIS_Imcsch (ANALYSIS_FUNCDESC_START+100)
#define ANALYSIS_FUNCNAME_START (1)
@@ -228,7 +235,14 @@
#define ANALYSIS_FUNCNAME_Couppcd (ANALYSIS_FUNCNAME_START+90)
#define ANALYSIS_FUNCNAME_Coupnum (ANALYSIS_FUNCNAME_START+91)
#define ANALYSIS_FUNCNAME_Fvschedule (ANALYSIS_FUNCNAME_START+92)
-
+#define ANALYSIS_FUNCNAME_Imtan (ANALYSIS_FUNCNAME_START+93)
+#define ANALYSIS_FUNCNAME_Imsec (ANALYSIS_FUNCNAME_START+94)
+#define ANALYSIS_FUNCNAME_Imcsc (ANALYSIS_FUNCNAME_START+95)
+#define ANALYSIS_FUNCNAME_Imcot (ANALYSIS_FUNCNAME_START+96)
+#define ANALYSIS_FUNCNAME_Imsinh (ANALYSIS_FUNCNAME_START+97)
+#define ANALYSIS_FUNCNAME_Imcosh (ANALYSIS_FUNCNAME_START+98)
+#define ANALYSIS_FUNCNAME_Imsech (ANALYSIS_FUNCNAME_START+99)
+#define ANALYSIS_FUNCNAME_Imcsch (ANALYSIS_FUNCNAME_START+100)
#define ANALYSIS_DEFFUNCNAME_START (RID_ANALYSIS_DEFFUNCTION_NAMES+1)
@@ -325,6 +339,13 @@
#define ANALYSIS_DEFFUNCNAME_Couppcd (ANALYSIS_DEFFUNCNAME_START+90)
#define ANALYSIS_DEFFUNCNAME_Coupnum (ANALYSIS_DEFFUNCNAME_START+91)
#define ANALYSIS_DEFFUNCNAME_Fvschedule (ANALYSIS_DEFFUNCNAME_START+92)
-
+#define ANALYSIS_DEFFUNCNAME_Imtan (ANALYSIS_DEFFUNCNAME_START+93)
+#define ANALYSIS_DEFFUNCNAME_Imsec (ANALYSIS_DEFFUNCNAME_START+94)
+#define ANALYSIS_DEFFUNCNAME_Imcsc (ANALYSIS_DEFFUNCNAME_START+95)
+#define ANALYSIS_DEFFUNCNAME_Imcot (ANALYSIS_DEFFUNCNAME_START+96)
+#define ANALYSIS_DEFFUNCNAME_Imsinh (ANALYSIS_DEFFUNCNAME_START+97)
+#define ANALYSIS_DEFFUNCNAME_Imcosh (ANALYSIS_DEFFUNCNAME_START+98)
+#define ANALYSIS_DEFFUNCNAME_Imsech (ANALYSIS_DEFFUNCNAME_START+99)
+#define ANALYSIS_DEFFUNCNAME_Imcsch (ANALYSIS_DEFFUNCNAME_START+100)
#endif
diff --git a/scaddins/source/analysis/analysis.hxx b/scaddins/source/analysis/analysis.hxx
index 3e0fd4a99e73..b6d58e621452 100644
--- a/scaddins/source/analysis/analysis.hxx
+++ b/scaddins/source/analysis/analysis.hxx
@@ -193,6 +193,14 @@ public:
virtual STRING SAL_CALL getImsum( constREFXPS& xOpt, const SEQSEQ( STRING )& aNum1, const SEQ( ANY )& aFollowingPars ) THROWDEF_RTE_IAE;
virtual STRING SAL_CALL getImsqrt( const STRING& aNum ) THROWDEF_RTE_IAE;
+ virtual STRING SAL_CALL getImtan( const STRING& aNum ) THROWDEF_RTE_IAE;
+ virtual STRING SAL_CALL getImsec( const STRING& aNum ) THROWDEF_RTE_IAE;
+ virtual STRING SAL_CALL getImcsc( const STRING& aNum ) THROWDEF_RTE_IAE;
+ virtual STRING SAL_CALL getImcot( const STRING& aNum ) THROWDEF_RTE_IAE;
+ virtual STRING SAL_CALL getImsinh( const STRING& aNum ) THROWDEF_RTE_IAE;
+ virtual STRING SAL_CALL getImcosh( const STRING& aNum ) THROWDEF_RTE_IAE;
+ virtual STRING SAL_CALL getImsech( const STRING& aNum ) THROWDEF_RTE_IAE;
+ virtual STRING SAL_CALL getImcsch( const STRING& aNum ) THROWDEF_RTE_IAE;
virtual STRING SAL_CALL getComplex( double fReal, double fImaginary, const ANY& rSuffix ) THROWDEF_RTE_IAE;
virtual double SAL_CALL getConvert( double fVal, const STRING& aFromUnit, const STRING& aToUnit ) THROWDEF_RTE_IAE;
diff --git a/scaddins/source/analysis/analysis.src b/scaddins/source/analysis/analysis.src
index bdff7932b68b..8e81e3e3010c 100644
--- a/scaddins/source/analysis/analysis.src
+++ b/scaddins/source/analysis/analysis.src
@@ -1352,6 +1352,150 @@ Resource RID_ANALYSIS_FUNCTION_DESCRIPTIONS
};
+ Resource ANALYSIS_Imtan
+ {
+ String 1 // description Imtan
+ {
+ Text [ en-US ] = "Returns the tangent of a complex number";
+ };
+
+ String 2 // name of parameter 1 Imtan
+ {
+ Text [ en-US ] = "Complex number";
+ };
+
+ String 3 // description of parameter 1 Imtan
+ {
+ Text [ en-US ] = "A complex number";
+ };
+ };
+
+ Resource ANALYSIS_Imsec
+ {
+ String 1 // description Imsec
+ {
+ Text [ en-US ] = "Returns the secant of a complex number";
+ };
+
+ String 2 // name of parameter 1 Imsec
+ {
+ Text [ en-US ] = "Complex number";
+ };
+
+ String 3 // description of parameter 1 Imsec
+ {
+ Text [ en-US ] = "A complex number";
+ };
+ };
+
+ Resource ANALYSIS_Imcsc
+ {
+ String 1 // description Imcsc
+ {
+ Text [ en-US ] = "Returns the cosecant of a complex number";
+ };
+
+ String 2 // name of parameter 1 Imcsc
+ {
+ Text [ en-US ] = "Complex number";
+ };
+
+ String 3 // description of parameter 1 Imcsc
+ {
+ Text [ en-US ] = "A complex number";
+ };
+ };
+
+ Resource ANALYSIS_Imcot
+ {
+ String 1 // description Imcot
+ {
+ Text [ en-US ] = "Returns the cotangent of a complex number";
+ };
+
+ String 2 // name of parameter 1 Imcot
+ {
+ Text [ en-US ] = "Complex number";
+ };
+
+ String 3 // description of parameter 1 Imcot
+ {
+ Text [ en-US ] = "A complex number";
+ };
+ };
+
+ Resource ANALYSIS_Imsinh
+ {
+ String 1 // description Imsinh
+ {
+ Text [ en-US ] = "Returns the hyperbolic sine of a complex number";
+ };
+
+ String 2 // name of parameter 1 Imsinh
+ {
+ Text [ en-US ] = "Complex number";
+ };
+
+ String 3 // description of parameter 1 Imsinh
+ {
+ Text [ en-US ] = "A complex number";
+ };
+ };
+
+ Resource ANALYSIS_Imcosh
+ {
+ String 1 // description Imcosh
+ {
+ Text [ en-US ] = "Returns the hyperbolic cosine of a complex number";
+ };
+
+ String 2 // name of parameter 1 Imcosh
+ {
+ Text [ en-US ] = "Complex number";
+ };
+
+ String 3 // description of parameter 1 Imcosh
+ {
+ Text [ en-US ] = "A complex number";
+ };
+ };
+
+ Resource ANALYSIS_Imsech
+ {
+ String 1 // description Imsech
+ {
+ Text [ en-US ] = "Returns the hyperbolic secant of a complex number";
+ };
+
+ String 2 // name of parameter 1 Imsech
+ {
+ Text [ en-US ] = "Complex number";
+ };
+
+ String 3 // description of parameter 1 Imsech
+ {
+ Text [ en-US ] = "A complex number";
+ };
+ };
+
+ Resource ANALYSIS_Imcsch
+ {
+ String 1 // description Imcsch
+ {
+ Text [ en-US ] = "Returns the hyperbolic cosecant of a complex number";
+ };
+
+ String 2 // name of parameter 1 Imcsch
+ {
+ Text [ en-US ] = "Complex number";
+ };
+
+ String 3 // description of parameter 1 Imcsch
+ {
+ Text [ en-US ] = "A complex number";
+ };
+ };
+
Resource ANALYSIS_Complex
{
String 1 // description Complex
diff --git a/scaddins/source/analysis/analysis_deffuncnames.src b/scaddins/source/analysis/analysis_deffuncnames.src
index 2c67e2ca3c11..cff3b5db7312 100644
--- a/scaddins/source/analysis/analysis_deffuncnames.src
+++ b/scaddins/source/analysis/analysis_deffuncnames.src
@@ -813,6 +813,78 @@ Resource RID_ANALYSIS_DEFFUNCTION_NAMES
};
};
+ StringArray ANALYSIS_DEFFUNCNAME_Imtan
+ {
+ ItemList =
+ {
+ < "IMTAN"; >;
+ < "IMTAN"; >;
+ };
+ };
+
+ StringArray ANALYSIS_DEFFUNCNAME_Imsec
+ {
+ ItemList =
+ {
+ < "IMSEC"; >;
+ < "IMSEC"; >;
+ };
+ };
+
+ StringArray ANALYSIS_DEFFUNCNAME_Imcsc
+ {
+ ItemList =
+ {
+ < "IMCSC"; >;
+ < "IMCSC"; >;
+ };
+ };
+
+ StringArray ANALYSIS_DEFFUNCNAME_Imcot
+ {
+ ItemList =
+ {
+ < "IMCOT"; >;
+ < "IMCOT"; >;
+ };
+ };
+
+ StringArray ANALYSIS_DEFFUNCNAME_Imsinh
+ {
+ ItemList =
+ {
+ < "IMSINH"; >;
+ < "IMSINH"; >;
+ };
+ };
+
+ StringArray ANALYSIS_DEFFUNCNAME_Imcosh
+ {
+ ItemList =
+ {
+ < "IMCOSH"; >;
+ < "IMCOSH"; >;
+ };
+ };
+
+ StringArray ANALYSIS_DEFFUNCNAME_Imsech
+ {
+ ItemList =
+ {
+ < "IMSECH"; >;
+ < "IMSECH"; >;
+ };
+ };
+
+ StringArray ANALYSIS_DEFFUNCNAME_Imcsch
+ {
+ ItemList =
+ {
+ < "IMCSCH"; >;
+ < "IMCSCH"; >;
+ };
+ };
+
StringArray ANALYSIS_DEFFUNCNAME_Complex
{
ItemList =
diff --git a/scaddins/source/analysis/analysis_funcnames.src b/scaddins/source/analysis/analysis_funcnames.src
index 47796f3b0e3c..fea61a58bbdc 100644
--- a/scaddins/source/analysis/analysis_funcnames.src
+++ b/scaddins/source/analysis/analysis_funcnames.src
@@ -465,6 +465,46 @@ Resource RID_ANALYSIS_FUNCTION_NAMES
Text [ en-US ] = "IMSQRT";
};
+ String ANALYSIS_FUNCNAME_Imtan
+ {
+ Text [ en-US ] = "IMTAN";
+ };
+
+ String ANALYSIS_FUNCNAME_Imsec
+ {
+ Text [ en-US ] = "IMSEC";
+ };
+
+ String ANALYSIS_FUNCNAME_Imcsc
+ {
+ Text [ en-US ] = "IMCSC";
+ };
+
+ String ANALYSIS_FUNCNAME_Imcot
+ {
+ Text [ en-US ] = "IMCOT";
+ };
+
+ String ANALYSIS_FUNCNAME_Imsinh
+ {
+ Text [ en-US ] = "IMSINH";
+ };
+
+ String ANALYSIS_FUNCNAME_Imcosh
+ {
+ Text [ en-US ] = "IMCOSH";
+ };
+
+ String ANALYSIS_FUNCNAME_Imsech
+ {
+ Text [ en-US ] = "IMSECH";
+ };
+
+ String ANALYSIS_FUNCNAME_Imcsch
+ {
+ Text [ en-US ] = "IMCSCH";
+ };
+
String ANALYSIS_FUNCNAME_Complex
{
Text [ en-US ] = "COMPLEX";
diff --git a/scaddins/source/analysis/analysishelper.cxx b/scaddins/source/analysis/analysishelper.cxx
index c2e17a8c05a8..a37632f2fca9 100644
--- a/scaddins/source/analysis/analysishelper.cxx
+++ b/scaddins/source/analysis/analysishelper.cxx
@@ -108,6 +108,14 @@ const FuncDataBase pFuncDatas[] =
FUNCDATA( Imsub, UNIQUE, STDPAR, 2, FDCat_Tech ),
FUNCDATA( Imsqrt, UNIQUE, STDPAR, 1, FDCat_Tech ),
FUNCDATA( Imsum, UNIQUE, INTPAR, 1, FDCat_Tech ),
+ FUNCDATA( Imtan, UNIQUE, STDPAR, 1, FDCat_Tech ),
+ FUNCDATA( Imsec, UNIQUE, STDPAR, 1, FDCat_Tech ),
+ FUNCDATA( Imcsc, UNIQUE, STDPAR, 1, FDCat_Tech ),
+ FUNCDATA( Imcot, UNIQUE, STDPAR, 1, FDCat_Tech ),
+ FUNCDATA( Imsinh, UNIQUE, STDPAR, 1, FDCat_Tech ),
+ FUNCDATA( Imcosh, UNIQUE, STDPAR, 1, FDCat_Tech ),
+ FUNCDATA( Imsech, UNIQUE, STDPAR, 1, FDCat_Tech ),
+ FUNCDATA( Imcsch, UNIQUE, STDPAR, 1, FDCat_Tech ),
FUNCDATA( Complex, UNIQUE, STDPAR, 3, FDCat_Tech ),
FUNCDATA( Convert, DOUBLE, STDPAR, 3, FDCat_Tech ),
FUNCDATA( Amordegrc, UNIQUE, INTPAR, 7, FDCat_Finance ),
@@ -1861,15 +1869,9 @@ void Complex::Sqrt( void )
}
-inline sal_Bool SinOverflow( double f )
-{
- return fabs( f ) >= 134217728;
-}
-
-
void Complex::Sin( void ) THROWDEF_RTE_IAE
{
- if( SinOverflow( r ) )
+ if( !::rtl::math::isValidArcArg( r ) )
THROW_IAE;
if( i )
@@ -1887,7 +1889,7 @@ void Complex::Sin( void ) THROWDEF_RTE_IAE
void Complex::Cos( void ) THROWDEF_RTE_IAE
{
- if( SinOverflow( r ) )
+ if( !::rtl::math::isValidArcArg( r ) )
THROW_IAE;
if( i )
@@ -1961,6 +1963,160 @@ void Complex::Log2( void ) THROWDEF_RTE_IAE
}
+void Complex::Tan(void) THROWDEF_RTE_IAE
+{
+ if ( i )
+ {
+ if( !::rtl::math::isValidArcArg( 2.0 * r ) )
+ THROW_IAE;
+ double fScale =1.0 / ( cos( 2.0 * r ) + cosh( 2.0 * i ));
+ r = sin( 2.0 * r ) * fScale;
+ i = sinh( 2.0 * i ) * fScale;
+ }
+ else
+ {
+ if( !::rtl::math::isValidArcArg( r ) )
+ THROW_IAE;
+ r = tan( r );
+ }
+}
+
+
+void Complex::Sec( void ) THROWDEF_RTE_IAE
+{
+ if( i )
+ {
+ if( !::rtl::math::isValidArcArg( 2 * r ) )
+ THROW_IAE;
+ double fScale = 1.0 / (cosh( 2.0 * i) + cos ( 2.0 * r));
+ double r_;
+ r_ = 2.0 * cos( r ) * cosh( i ) * fScale;
+ i = 2.0 * sin( r ) * sinh( i ) * fScale;
+ r = r_;
+ }
+ else
+ {
+ if( !::rtl::math::isValidArcArg( r ) )
+ THROW_IAE;
+ r = 1.0 / cos( r );
+ }
+}
+
+
+void Complex::Csc( void ) THROWDEF_RTE_IAE
+{
+ if( i )
+ {
+ if( !::rtl::math::isValidArcArg( 2 * r ) )
+ THROW_IAE;
+ double fScale = 1.0 / (cosh( 2.0 * i) - cos ( 2.0 * r));
+ double r_;
+ r_ = 2.0 * sin( r ) * cosh( i ) * fScale;
+ i = -2.0 * cos( r ) * sinh( i ) * fScale;
+ r = r_;
+ }
+ else
+ {
+ if( !::rtl::math::isValidArcArg( r ) )
+ THROW_IAE;
+ r = 1.0 / sin( r );
+ }
+}
+
+
+void Complex::Cot(void) THROWDEF_RTE_IAE
+{
+ if ( i )
+ {
+ if( !::rtl::math::isValidArcArg( 2.0 * r ) )
+ THROW_IAE;
+ double fScale =1.0 / ( cosh( 2.0 * i ) - cos( 2.0 * r ) );
+ r = sin( 2.0 * r ) * fScale;
+ i = - ( sinh( 2.0 * i ) * fScale );
+ }
+ else
+ {
+ if( !::rtl::math::isValidArcArg( r ) )
+ THROW_IAE;
+ r = 1.0 / tan( r );
+ }
+}
+
+
+void Complex::Sinh( void ) THROWDEF_RTE_IAE
+{
+ if( !::rtl::math::isValidArcArg( r ) )
+ THROW_IAE;
+
+ if( i )
+ {
+ double r_;
+ r_ = sinh( r ) * cos( i );
+ i = cosh( r ) * sin( i );
+ r = r_;
+ }
+ else
+ r = sinh( r );
+}
+
+
+void Complex::Cosh( void ) THROWDEF_RTE_IAE
+{
+ if( !::rtl::math::isValidArcArg( r ) )
+ THROW_IAE;
+
+ if( i )
+ {
+ double r_;
+ r_ = cosh( r ) * cos( i );
+ i = sinh( r ) * sin( i );
+ r = r_;
+ }
+ else
+ r = cosh( r );
+}
+
+
+void Complex::Sech(void) THROWDEF_RTE_IAE
+{
+ if ( i )
+ {
+ if( !::rtl::math::isValidArcArg( 2.0 * r ) )
+ THROW_IAE;
+ double fScale =1.0 / ( cosh( 2.0 * r ) + cos( 2.0 * i ));
+ double r_;
+ r_ = 2.0 * cosh( 2.0 * r ) * cos( i ) * fScale;
+ i = - (2.0 * sinh( 2.0 * r ) * sin( i ) * fScale );
+ r = r_ ;
+ }
+ else
+ {
+ if( !::rtl::math::isValidArcArg( r ) )
+ THROW_IAE;
+ r = 1.0 / cosh( r );
+ }
+}
+
+
+void Complex::Csch(void) THROWDEF_RTE_IAE
+{
+ if ( i )
+ {
+ if( !::rtl::math::isValidArcArg( 2.0 * r ) )
+ THROW_IAE;
+ double fScale =1.0 / ( cosh( 2.0 * r ) - cos( 2.0 * i ));
+ double r_;
+ r_ = 2.0 * sinh( 2.0 * r ) * cos( i ) * fScale;
+ i = - ( 2.0 * cosh( 2.0 * r ) * sin( i ) * fScale );
+ r = r_ ;
+ }
+ else
+ {
+ if( !::rtl::math::isValidArcArg( r ) )
+ THROW_IAE;
+ r = 1.0 / sinh( r );
+ }
+}
ComplexList::~ComplexList()
diff --git a/scaddins/source/analysis/analysishelper.hxx b/scaddins/source/analysis/analysishelper.hxx
index 136a6e385f64..2abfc0f533ab 100644
--- a/scaddins/source/analysis/analysishelper.hxx
+++ b/scaddins/source/analysis/analysishelper.hxx
@@ -462,7 +462,7 @@ class Complex
sal_Unicode c;
public:
- inline Complex( double fReal, double fImag = 0.0, sal_Char cC = '\0' );
+ inline Complex( double fReal, double fImag = 0.0, sal_Unicode cC = '\0' );
Complex( const STRING& rComplexAsString ) THROWDEF_RTE_IAE;
inline static sal_Bool IsImagUnit( sal_Unicode c );
@@ -490,6 +490,15 @@ public:
inline void Mult( const Complex& rMult );
inline void Sub( const Complex& rMult );
inline void Add( const Complex& rAdd );
+ void Tan( void ) THROWDEF_RTE_IAE;
+ void Sec( void ) THROWDEF_RTE_IAE;
+ void Csc( void ) THROWDEF_RTE_IAE;
+ void Cot( void ) THROWDEF_RTE_IAE;
+ void Sinh( void ) THROWDEF_RTE_IAE;
+ void Cosh( void ) THROWDEF_RTE_IAE;
+ void Sech( void ) THROWDEF_RTE_IAE;
+ void Csch( void ) THROWDEF_RTE_IAE;
+
};
@@ -807,7 +816,7 @@ inline const FuncData* FuncDataList::Get( sal_uInt32 n ) const
}
-inline Complex::Complex( double fReal, double fImag, sal_Char cC ) :
+inline Complex::Complex( double fReal, double fImag, sal_Unicode cC ) :
r( fReal ), i( fImag ), c( cC )
{
}