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

char *name = "VandenBroeck and Keller, Equation (6)";

double f_if(float F, float l) {
        float r7994 = atan2(1.0, 0.0);
        float r7995 = l;
        float r7996 = r7994 * r7995;
        float r7997 = 1;
        float r7998 = F;
        float r7999 = r7998 * r7998;
        float r8000 = r7997 / r7999;
        float r8001 = tan(r7996);
        float r8002 = r8000 * r8001;
        float r8003 = r7996 - r8002;
        return r8003;
}

double f_id(double F, double l) {
        double r8004 = atan2(1.0, 0.0);
        double r8005 = l;
        double r8006 = r8004 * r8005;
        double r8007 = 1;
        double r8008 = F;
        double r8009 = r8008 * r8008;
        double r8010 = r8007 / r8009;
        double r8011 = tan(r8006);
        double r8012 = r8010 * r8011;
        double r8013 = r8006 - r8012;
        return r8013;
}


double f_of(float F, float l) {
        float r8014 = atan2(1.0, 0.0);
        float r8015 = l;
        float r8016 = r8014 * r8015;
        float r8017 = 1;
        float r8018 = F;
        float r8019 = r8017 / r8018;
        float r8020 = r8018 / r8014;
        float r8021 = r8020 / r8015;
        float r8022 = exp(r8016);
        float r8023 = log(r8022);
        float r8024 = 1/3;
        float r8025 = r8024 * r8018;
        float r8026 = r8023 * r8025;
        float r8027 = r8021 - r8026;
        float r8028 = r8019 / r8027;
        float r8029 = r8016 - r8028;
        return r8029;
}

double f_od(double F, double l) {
        double r8030 = atan2(1.0, 0.0);
        double r8031 = l;
        double r8032 = r8030 * r8031;
        double r8033 = 1;
        double r8034 = F;
        double r8035 = r8033 / r8034;
        double r8036 = r8034 / r8030;
        double r8037 = r8036 / r8031;
        double r8038 = exp(r8032);
        double r8039 = log(r8038);
        double r8040 = 1/3;
        double r8041 = r8040 * r8034;
        double r8042 = r8039 * r8041;
        double r8043 = r8037 - r8042;
        double r8044 = r8035 / r8043;
        double r8045 = r8032 - r8044;
        return r8045;
}

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 r8046, r8047, r8048, r8049, r8050, r8051, r8052, r8053, r8054, r8055;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2896);
        mpfr_init(r8046);
        mpfr_init(r8047);
        mpfr_init(r8048);
        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);
}

double f_im(double F, double l) {
        mpfr_const_pi(r8046, MPFR_RNDN);
        mpfr_set_d(r8047, l, MPFR_RNDN);
        mpfr_mul(r8048, r8046, r8047, MPFR_RNDN);
        ;
        mpfr_set_d(r8050, F, MPFR_RNDN);
        mpfr_mul(r8051, r8050, r8050, MPFR_RNDN);
        mpfr_div(r8052, r8049, r8051, MPFR_RNDN);
        mpfr_tan(r8053, r8048, MPFR_RNDN);
        mpfr_mul(r8054, r8052, r8053, MPFR_RNDN);
        mpfr_sub(r8055, r8048, r8054, MPFR_RNDN);
        return mpfr_get_d(r8055, MPFR_RNDN);
}

static mpfr_t r8056, r8057, r8058, r8059, r8060, r8061, r8062, r8063, r8064, r8065, r8066, r8067, r8068, r8069, r8070, r8071;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2896);
        mpfr_init(r8056);
        mpfr_init(r8057);
        mpfr_init(r8058);
        mpfr_init_set_str(r8059, "1", 10, MPFR_RNDN);
        mpfr_init(r8060);
        mpfr_init(r8061);
        mpfr_init(r8062);
        mpfr_init(r8063);
        mpfr_init(r8064);
        mpfr_init(r8065);
        mpfr_init_set_str(r8066, "1/3", 10, MPFR_RNDN);
        mpfr_init(r8067);
        mpfr_init(r8068);
        mpfr_init(r8069);
        mpfr_init(r8070);
        mpfr_init(r8071);
}

double f_fm(double F, double l) {
        mpfr_const_pi(r8056, MPFR_RNDN);
        mpfr_set_d(r8057, l, MPFR_RNDN);
        mpfr_mul(r8058, r8056, r8057, MPFR_RNDN);
        ;
        mpfr_set_d(r8060, F, MPFR_RNDN);
        mpfr_div(r8061, r8059, r8060, MPFR_RNDN);
        mpfr_div(r8062, r8060, r8056, MPFR_RNDN);
        mpfr_div(r8063, r8062, r8057, MPFR_RNDN);
        mpfr_exp(r8064, r8058, MPFR_RNDN);
        mpfr_log(r8065, r8064, MPFR_RNDN);
        ;
        mpfr_mul(r8067, r8066, r8060, MPFR_RNDN);
        mpfr_mul(r8068, r8065, r8067, MPFR_RNDN);
        mpfr_sub(r8069, r8063, r8068, MPFR_RNDN);
        mpfr_div(r8070, r8061, r8069, MPFR_RNDN);
        mpfr_sub(r8071, r8058, r8070, MPFR_RNDN);
        return mpfr_get_d(r8071, MPFR_RNDN);
}

static mpfr_t r8072, r8073, r8074, r8075, r8076, r8077, r8078, r8079, r8080, r8081, r8082, r8083, r8084, r8085, r8086, r8087;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2896);
        mpfr_init(r8072);
        mpfr_init(r8073);
        mpfr_init(r8074);
        mpfr_init_set_str(r8075, "1", 10, MPFR_RNDN);
        mpfr_init(r8076);
        mpfr_init(r8077);
        mpfr_init(r8078);
        mpfr_init(r8079);
        mpfr_init(r8080);
        mpfr_init(r8081);
        mpfr_init_set_str(r8082, "1/3", 10, MPFR_RNDN);
        mpfr_init(r8083);
        mpfr_init(r8084);
        mpfr_init(r8085);
        mpfr_init(r8086);
        mpfr_init(r8087);
}

double f_dm(double F, double l) {
        mpfr_const_pi(r8072, MPFR_RNDN);
        mpfr_set_d(r8073, l, MPFR_RNDN);
        mpfr_mul(r8074, r8072, r8073, MPFR_RNDN);
        ;
        mpfr_set_d(r8076, F, MPFR_RNDN);
        mpfr_div(r8077, r8075, r8076, MPFR_RNDN);
        mpfr_div(r8078, r8076, r8072, MPFR_RNDN);
        mpfr_div(r8079, r8078, r8073, MPFR_RNDN);
        mpfr_exp(r8080, r8074, MPFR_RNDN);
        mpfr_log(r8081, r8080, MPFR_RNDN);
        ;
        mpfr_mul(r8083, r8082, r8076, MPFR_RNDN);
        mpfr_mul(r8084, r8081, r8083, MPFR_RNDN);
        mpfr_sub(r8085, r8079, r8084, MPFR_RNDN);
        mpfr_div(r8086, r8077, r8085, MPFR_RNDN);
        mpfr_sub(r8087, r8074, r8086, MPFR_RNDN);
        return mpfr_get_d(r8087, MPFR_RNDN);
}

