//## Complex Complex.catanf(); static KMETHOD Complex_catanf(KonohaContext *kctx, KonohaStack *sfp) { kComplex *kc = (kComplex *) sfp[0].asObject; float _Complex zf = (float _Complex)kc->z; float ret = catanf(zf); KReturnFloatValue(ret); }
float complex catanhf (float complex Z) { float complex Tmp; float complex Res; __real__ Tmp = - __imag__ Z; __imag__ Tmp = __real__ Z; Tmp = catanf (Tmp); __real__ Res = __imag__ Tmp; __imag__ Res = - __real__ Tmp; return Res; }
float complex CLANG_PORT_DECL(catanhf) (float complex Z) { float complex Tmp; float complex Res; __real__ Tmp = - __imag__ Z; __imag__ Tmp = __real__ Z; Tmp = catanf (Tmp); __real__ Res = __imag__ Tmp; __imag__ Res = - __real__ Tmp; return Res; }
fcomplex catanhf(fcomplex z) { float x, y; fcomplex ans, ct; x = F_RE(z); y = F_IM(z); F_RE(z) = -y; F_IM(z) = x; ct = catanf(z); F_RE(ans) = F_IM(ct); F_IM(ans) = -F_RE(ct); return (ans); }
TEST_GROUP(Complex) float complex f = I; double complex d = I; long double complex ld = I; TEST_RESOLVED(MIPS, "http://ellcc.org/bugzilla/show_bug.cgi?id=59") { TEST_TRACE(C99 7.3.5.1) d = cacos(d); f = cacosf(f); ld = cacosl(ld); TEST_TRACE(C99 7.3.5.2) d = casin(d); f = casinf(f); ld = casinl(ld); TEST_TRACE(C99 7.3.5.3) d = catan(d); f = catanf(f); ld = catanl(ld); TEST_TRACE(C99 7.3.5.4) d = ccos(d); f = ccosf(f); ld = ccosl(ld); TEST_TRACE(C99 7.3.5.5) d = csin(d); f = csinf(f); ld = csinl(ld); TEST_TRACE(C99 7.3.5.6) d = ctan(d); f = ctanf(f); ld = ctanl(ld); TEST_TRACE(C99 7.3.6.1) d = cacosh(d);
float complex catanhf(float complex z) { z = catanf(CMPLXF(-cimagf(z), crealf(z))); return CMPLXF(cimagf(z), -crealf(z)); }
void docomplexf (void) { #ifndef NO_FLOAT complex float ca, cb, cc; float f1; ca = 1.0 + 1.0 * I; cb = 1.0 - 1.0 * I; f1 = cabsf (ca); fprintf (stdout, "cabsf : %f\n", f1); cc = cacosf (ca); fprintf (stdout, "cacosf : %f %fi\n", crealf (cc), cimagf (cc)); cc = cacoshf (ca); fprintf (stdout, "cacoshf: %f %fi\n", crealf (cc), cimagf (cc)); f1 = cargf (ca); fprintf (stdout, "cargf : %f\n", f1); cc = casinf (ca); fprintf (stdout, "casinf : %f %fi\n", crealf (cc), cimagf (cc)); cc = casinhf (ca); fprintf (stdout, "casinhf: %f %fi\n", crealf (cc), cimagf (cc)); cc = catanf (ca); fprintf (stdout, "catanf : %f %fi\n", crealf (cc), cimagf (cc)); cc = catanhf (ca); fprintf (stdout, "catanhf: %f %fi\n", crealf (cc), cimagf (cc)); cc = ccosf (ca); fprintf (stdout, "ccosf : %f %fi\n", crealf (cc), cimagf (cc)); cc = ccoshf (ca); fprintf (stdout, "ccoshf : %f %fi\n", crealf (cc), cimagf (cc)); cc = cexpf (ca); fprintf (stdout, "cexpf : %f %fi\n", crealf (cc), cimagf (cc)); f1 = cimagf (ca); fprintf (stdout, "cimagf : %f\n", f1); cc = clogf (ca); fprintf (stdout, "clogf : %f %fi\n", crealf (cc), cimagf (cc)); cc = conjf (ca); fprintf (stdout, "conjf : %f %fi\n", crealf (cc), cimagf (cc)); cc = cpowf (ca, cb); fprintf (stdout, "cpowf : %f %fi\n", crealf (cc), cimagf (cc)); cc = cprojf (ca); fprintf (stdout, "cprojf : %f %fi\n", crealf (cc), cimagf (cc)); f1 = crealf (ca); fprintf (stdout, "crealf : %f\n", f1); cc = csinf (ca); fprintf (stdout, "csinf : %f %fi\n", crealf (cc), cimagf (cc)); cc = csinhf (ca); fprintf (stdout, "csinhf : %f %fi\n", crealf (cc), cimagf (cc)); cc = csqrtf (ca); fprintf (stdout, "csqrtf : %f %fi\n", crealf (cc), cimagf (cc)); cc = ctanf (ca); fprintf (stdout, "ctanf : %f %fi\n", crealf (cc), cimagf (cc)); cc = ctanhf (ca); fprintf (stdout, "ctanhf : %f %fi\n", crealf (cc), cimagf (cc)); #endif }
TEST(complex, catanf) { ASSERT_EQ(0.0, catanf(0)); }
float complex catanhf(float complex z) { z = catanf(cpackf(-cimagf(z), crealf(z))); return cpackf(cimagf(z), -crealf(z)); }
int main() { unsigned int n=32; // number of tests unsigned int d=2; // number items per line // data arrays float complex z[n]; float complex test[n]; float complex err_max = 0.0f; unsigned int i; for (i=0; i<n; i++) { // generate random complex number z[i] = 2.0f*(2.0f*sandbox_randf() - 1.0f) + 2.0f*(2.0f*sandbox_randf() - 1.0f) * _Complex_I; test[i] = catanf(z[i]); float complex atanz_hat = sandbox_catanf(z[i]); float complex err = test[i] - atanz_hat; printf("%3u: z=%6.2f+j%6.2f, atan(z)=%6.2f+j%6.2f (%6.2f+j%6.2f) e=%12.4e\n", i, crealf(z[i]), cimagf(z[i]), crealf(test[i]), cimagf(test[i]), crealf(atanz_hat), cimagf(atanz_hat), cabsf(err)); if ( cabsf(err) > cabsf(err_max) ) err_max = err; } printf("maximum error: %12.4e;\n", cabsf(err_max)); // // print autotest lines // printf("\n"); printf(" float complex z[%u] = {\n ", n); for (i=0; i<n; i++) { printf("%12.4e+_Complex_I*%12.4e", crealf(z[i]), cimagf(z[i])); if ( i == n-1) printf(" "); else if ( ((i+1)%d)==0 ) printf(",\n "); else printf(", "); } printf("};\n"); printf("\n"); printf(" float complex test[%u] = {\n ", n); for (i=0; i<n; i++) { printf("%12.4e+_Complex_I*%12.4e", crealf(test[i]), cimagf(test[i])); if ( i == n-1) printf(" "); else if ( ((i+1)%d)==0 ) printf(",\n "); else printf(", "); } printf("};\n"); printf("done.\n"); return 0; }