#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "arccos";

double f_if(float x) {
        float r18034 = 2.0f;
        float r18035 = 1.0f;
        float r18036 = x;
        float r18037 = r18035 - r18036;
        float r18038 = r18035 + r18036;
        float r18039 = r18037 / r18038;
        float r18040 = sqrt(r18039);
        float r18041 = atan(r18040);
        float r18042 = r18034 * r18041;
        return r18042;
}

double f_id(double x) {
        double r18043 = 2.0;
        double r18044 = 1.0;
        double r18045 = x;
        double r18046 = r18044 - r18045;
        double r18047 = r18044 + r18045;
        double r18048 = r18046 / r18047;
        double r18049 = sqrt(r18048);
        double r18050 = atan(r18049);
        double r18051 = r18043 * r18050;
        return r18051;
}


double f_of(float x) {
        float r18052 = 2.0f;
        float r18053 = 1.0f;
        float r18054 = x;
        float r18055 = r18053 + r18054;
        float r18056 = r18053 - r18054;
        float r18057 = r18055 / r18056;
        float r18058 = r18053 / r18057;
        float r18059 = sqrt(r18058);
        float r18060 = atan(r18059);
        float r18061 = r18052 * r18060;
        return r18061;
}

double f_od(double x) {
        double r18062 = 2.0;
        double r18063 = 1.0;
        double r18064 = x;
        double r18065 = r18063 + r18064;
        double r18066 = r18063 - r18064;
        double r18067 = r18065 / r18066;
        double r18068 = r18063 / r18067;
        double r18069 = sqrt(r18068);
        double r18070 = atan(r18069);
        double r18071 = r18062 * r18070;
        return r18071;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r18072, r18073, r18074, r18075, r18076, r18077, r18078, r18079, r18080;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r18072, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r18073, "1", 10, MPFR_RNDN);
        mpfr_init(r18074);
        mpfr_init(r18075);
        mpfr_init(r18076);
        mpfr_init(r18077);
        mpfr_init(r18078);
        mpfr_init(r18079);
        mpfr_init(r18080);
}

double f_im(double x) {
        ;
        ;
        mpfr_set_d(r18074, x, MPFR_RNDN);
        mpfr_sub(r18075, r18073, r18074, MPFR_RNDN);
        mpfr_add(r18076, r18073, r18074, MPFR_RNDN);
        mpfr_div(r18077, r18075, r18076, MPFR_RNDN);
        mpfr_sqrt(r18078, r18077, MPFR_RNDN);
        mpfr_atan(r18079, r18078, MPFR_RNDN);
        mpfr_mul(r18080, r18072, r18079, MPFR_RNDN);
        return mpfr_get_d(r18080, MPFR_RNDN);
}

static mpfr_t r18081, r18082, r18083, r18084, r18085, r18086, r18087, r18088, r18089, r18090;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r18081, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r18082, "1", 10, MPFR_RNDN);
        mpfr_init(r18083);
        mpfr_init(r18084);
        mpfr_init(r18085);
        mpfr_init(r18086);
        mpfr_init(r18087);
        mpfr_init(r18088);
        mpfr_init(r18089);
        mpfr_init(r18090);
}

double f_fm(double x) {
        ;
        ;
        mpfr_set_d(r18083, x, MPFR_RNDN);
        mpfr_add(r18084, r18082, r18083, MPFR_RNDN);
        mpfr_sub(r18085, r18082, r18083, MPFR_RNDN);
        mpfr_div(r18086, r18084, r18085, MPFR_RNDN);
        mpfr_div(r18087, r18082, r18086, MPFR_RNDN);
        mpfr_sqrt(r18088, r18087, MPFR_RNDN);
        mpfr_atan(r18089, r18088, MPFR_RNDN);
        mpfr_mul(r18090, r18081, r18089, MPFR_RNDN);
        return mpfr_get_d(r18090, MPFR_RNDN);
}

static mpfr_t r18091, r18092, r18093, r18094, r18095, r18096, r18097, r18098, r18099, r18100;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r18091, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r18092, "1", 10, MPFR_RNDN);
        mpfr_init(r18093);
        mpfr_init(r18094);
        mpfr_init(r18095);
        mpfr_init(r18096);
        mpfr_init(r18097);
        mpfr_init(r18098);
        mpfr_init(r18099);
        mpfr_init(r18100);
}

double f_dm(double x) {
        ;
        ;
        mpfr_set_d(r18093, x, MPFR_RNDN);
        mpfr_add(r18094, r18092, r18093, MPFR_RNDN);
        mpfr_sub(r18095, r18092, r18093, MPFR_RNDN);
        mpfr_div(r18096, r18094, r18095, MPFR_RNDN);
        mpfr_div(r18097, r18092, r18096, MPFR_RNDN);
        mpfr_sqrt(r18098, r18097, MPFR_RNDN);
        mpfr_atan(r18099, r18098, MPFR_RNDN);
        mpfr_mul(r18100, r18091, r18099, MPFR_RNDN);
        return mpfr_get_d(r18100, MPFR_RNDN);
}

