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

char *name = "arccos";

double f_if(float x) {
        float r7994 = 2;
        float r7995 = 1;
        float r7996 = x;
        float r7997 = r7995 - r7996;
        float r7998 = r7995 + r7996;
        float r7999 = r7997 / r7998;
        float r8000 = sqrt(r7999);
        float r8001 = atan(r8000);
        float r8002 = r7994 * r8001;
        return r8002;
}

double f_id(double x) {
        double r8003 = 2;
        double r8004 = 1;
        double r8005 = x;
        double r8006 = r8004 - r8005;
        double r8007 = r8004 + r8005;
        double r8008 = r8006 / r8007;
        double r8009 = sqrt(r8008);
        double r8010 = atan(r8009);
        double r8011 = r8003 * r8010;
        return r8011;
}


double f_of(float x) {
        float r8012 = 2;
        float r8013 = 1;
        float r8014 = x;
        float r8015 = r8013 - r8014;
        float r8016 = r8013 + r8014;
        float r8017 = r8015 / r8016;
        float r8018 = sqrt(r8017);
        float r8019 = atan(r8018);
        float r8020 = r8012 * r8019;
        return r8020;
}

double f_od(double x) {
        double r8021 = 2;
        double r8022 = 1;
        double r8023 = x;
        double r8024 = r8022 - r8023;
        double r8025 = r8022 + r8023;
        double r8026 = r8024 / r8025;
        double r8027 = sqrt(r8026);
        double r8028 = atan(r8027);
        double r8029 = r8021 * r8028;
        return r8029;
}

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 r8030, r8031, r8032, r8033, r8034, r8035, r8036, r8037, r8038;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8030, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8031, "1", 10, MPFR_RNDN);
        mpfr_init(r8032);
        mpfr_init(r8033);
        mpfr_init(r8034);
        mpfr_init(r8035);
        mpfr_init(r8036);
        mpfr_init(r8037);
        mpfr_init(r8038);
}

double f_im(double x) {
        ;
        ;
        mpfr_set_d(r8032, x, MPFR_RNDN);
        mpfr_sub(r8033, r8031, r8032, MPFR_RNDN);
        mpfr_add(r8034, r8031, r8032, MPFR_RNDN);
        mpfr_div(r8035, r8033, r8034, MPFR_RNDN);
        mpfr_sqrt(r8036, r8035, MPFR_RNDN);
        mpfr_atan(r8037, r8036, MPFR_RNDN);
        mpfr_mul(r8038, r8030, r8037, MPFR_RNDN);
        return mpfr_get_d(r8038, MPFR_RNDN);
}

static mpfr_t r8039, r8040, r8041, r8042, r8043, r8044, r8045, r8046, r8047;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8039, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8040, "1", 10, MPFR_RNDN);
        mpfr_init(r8041);
        mpfr_init(r8042);
        mpfr_init(r8043);
        mpfr_init(r8044);
        mpfr_init(r8045);
        mpfr_init(r8046);
        mpfr_init(r8047);
}

double f_fm(double x) {
        ;
        ;
        mpfr_set_d(r8041, x, MPFR_RNDN);
        mpfr_sub(r8042, r8040, r8041, MPFR_RNDN);
        mpfr_add(r8043, r8040, r8041, MPFR_RNDN);
        mpfr_div(r8044, r8042, r8043, MPFR_RNDN);
        mpfr_sqrt(r8045, r8044, MPFR_RNDN);
        mpfr_atan(r8046, r8045, MPFR_RNDN);
        mpfr_mul(r8047, r8039, r8046, MPFR_RNDN);
        return mpfr_get_d(r8047, MPFR_RNDN);
}

static mpfr_t r8048, r8049, r8050, r8051, r8052, r8053, r8054, r8055, r8056;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8048, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8049, "1", 10, MPFR_RNDN);
        mpfr_init(r8050);
        mpfr_init(r8051);
        mpfr_init(r8052);
        mpfr_init(r8053);
        mpfr_init(r8054);
        mpfr_init(r8055);
        mpfr_init(r8056);
}

double f_dm(double x) {
        ;
        ;
        mpfr_set_d(r8050, x, MPFR_RNDN);
        mpfr_sub(r8051, r8049, r8050, MPFR_RNDN);
        mpfr_add(r8052, r8049, r8050, MPFR_RNDN);
        mpfr_div(r8053, r8051, r8052, MPFR_RNDN);
        mpfr_sqrt(r8054, r8053, MPFR_RNDN);
        mpfr_atan(r8055, r8054, MPFR_RNDN);
        mpfr_mul(r8056, r8048, r8055, MPFR_RNDN);
        return mpfr_get_d(r8056, MPFR_RNDN);
}

