summaryrefslogtreecommitdiff
path: root/src/elementaryFunctions/tan/ctans.c
diff options
context:
space:
mode:
authorjofret2008-06-16 10:49:16 +0000
committerjofret2008-06-16 10:49:16 +0000
commit04f183232b012854c16f6574ab4f8ac42758e892 (patch)
treeeb623d86be48cd27c4ced8d6f18593987fc3ab02 /src/elementaryFunctions/tan/ctans.c
parent58f53a3783880802f8c892be70624fc39714a8e9 (diff)
downloadscilab2c-04f183232b012854c16f6574ab4f8ac42758e892.tar.gz
scilab2c-04f183232b012854c16f6574ab4f8ac42758e892.tar.bz2
scilab2c-04f183232b012854c16f6574ab4f8ac42758e892.zip
Adding scilab algorithm
Update License
Diffstat (limited to 'src/elementaryFunctions/tan/ctans.c')
-rw-r--r--src/elementaryFunctions/tan/ctans.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/elementaryFunctions/tan/ctans.c b/src/elementaryFunctions/tan/ctans.c
index ee3396f1..9a6bd8c1 100644
--- a/src/elementaryFunctions/tan/ctans.c
+++ b/src/elementaryFunctions/tan/ctans.c
@@ -10,22 +10,36 @@
*
*/
+#include <math.h>
+#include "lapack.h"
#include "tan.h"
-/*
- #include "log.h"
-*/
#include "sqrt.h"
-/*
- #include "lapack.h"
-*/
+#include "cos.h"
+#include "sinh.h"
+#include "sin.h"
+#include "log.h"
+#include "abs.h"
+
+#define localSign(x) x >= 0 ? 1.0f : -1.0f
floatComplex ctans(floatComplex z) {
- /*
+ float Temp = 0.0f;
+ float Lim = 1.0f + slogs(2.0f / ssqrts((float) getRelativeMachinePrecision()));
+ float RealIn = creals(z);
+ float ImagIn = cimags(z);
+ float RealOut = 0.0f;
+ float ImagOut = 0.0f;
- double out_real = 0;
- double out_imag = 0;
- double L = 1 + dlogs(2 / dsqrts(dlamch('e', 1)));
- */
+ Temp = powf(scoss(RealIn), 2.0f) + powf(ssinhs(ImagIn), 2.0f);
+ RealOut = 0.5f * ssins(2 * RealIn) / Temp;
+ if(sabss(ImagIn) < Lim)
+ {
+ ImagOut = 0.5f * ssinhs(2.0f * ImagIn) / Temp;
+ }
+ else
+ {
+ ImagOut = localSign(ImagIn);
+ }
- return z;
+ return FloatComplex(RealOut, ImagOut);
}