diff options
author | jofret | 2008-06-16 10:49:16 +0000 |
---|---|---|
committer | jofret | 2008-06-16 10:49:16 +0000 |
commit | 04f183232b012854c16f6574ab4f8ac42758e892 (patch) | |
tree | eb623d86be48cd27c4ced8d6f18593987fc3ab02 /src/elementaryFunctions/tan/ctans.c | |
parent | 58f53a3783880802f8c892be70624fc39714a8e9 (diff) | |
download | scilab2c-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.c | 38 |
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); } |