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

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

double f_if(float F, float B, float x) {
        float r7942 = x;
        float r7943 = 1;
        float r7944 = B;
        float r7945 = tan(r7944);
        float r7946 = r7943 / r7945;
        float r7947 = r7942 * r7946;
        float r7948 = -r7947;
        float r7949 = F;
        float r7950 = sin(r7944);
        float r7951 = r7949 / r7950;
        float r7952 = r7949 * r7949;
        float r7953 = 2;
        float r7954 = r7952 + r7953;
        float r7955 = r7953 * r7942;
        float r7956 = r7954 + r7955;
        float r7957 = r7943 / r7953;
        float r7958 = -r7957;
        float r7959 = pow(r7956, r7958);
        float r7960 = r7951 * r7959;
        float r7961 = r7948 + r7960;
        return r7961;
}

double f_id(double F, double B, double x) {
        double r7962 = x;
        double r7963 = 1;
        double r7964 = B;
        double r7965 = tan(r7964);
        double r7966 = r7963 / r7965;
        double r7967 = r7962 * r7966;
        double r7968 = -r7967;
        double r7969 = F;
        double r7970 = sin(r7964);
        double r7971 = r7969 / r7970;
        double r7972 = r7969 * r7969;
        double r7973 = 2;
        double r7974 = r7972 + r7973;
        double r7975 = r7973 * r7962;
        double r7976 = r7974 + r7975;
        double r7977 = r7963 / r7973;
        double r7978 = -r7977;
        double r7979 = pow(r7976, r7978);
        double r7980 = r7971 * r7979;
        double r7981 = r7968 + r7980;
        return r7981;
}


double f_of(float F, float B, float x) {
        float r7982 = F;
        float r7983 = -2.488577931529309e+83;
        bool r7984 = r7982 <= r7983;
        float r7985 = 1;
        float r7986 = r7985 / r7982;
        float r7987 = r7986 / r7982;
        float r7988 = B;
        float r7989 = sin(r7988);
        float r7990 = r7987 / r7989;
        float r7991 = x;
        float r7992 = tan(r7988);
        float r7993 = r7991 / r7992;
        float r7994 = r7985 / r7989;
        float r7995 = r7993 + r7994;
        float r7996 = r7990 - r7995;
        float r7997 = 1.644625965014904;
        bool r7998 = r7982 <= r7997;
        float r7999 = 2;
        float r8000 = fma(r7982, r7982, r7999);
        float r8001 = fma(r7999, r7991, r8000);
        float r8002 = sqrt(r8001);
        float r8003 = r7985 / r7999;
        float r8004 = -r8003;
        float r8005 = pow(r8002, r8004);
        float r8006 = r8005 * r8005;
        float r8007 = r7982 / r7989;
        float r8008 = -r7991;
        float r8009 = r8008 / r7992;
        float r8010 = fma(r8006, r8007, r8009);
        float r8011 = r7994 - r7993;
        float r8012 = r7982 * r7982;
        float r8013 = r7994 / r8012;
        float r8014 = r8011 - r8013;
        float r8015 = r7998 ? r8010 : r8014;
        float r8016 = r7984 ? r7996 : r8015;
        return r8016;
}

double f_od(double F, double B, double x) {
        double r8017 = F;
        double r8018 = -2.488577931529309e+83;
        bool r8019 = r8017 <= r8018;
        double r8020 = 1;
        double r8021 = r8020 / r8017;
        double r8022 = r8021 / r8017;
        double r8023 = B;
        double r8024 = sin(r8023);
        double r8025 = r8022 / r8024;
        double r8026 = x;
        double r8027 = tan(r8023);
        double r8028 = r8026 / r8027;
        double r8029 = r8020 / r8024;
        double r8030 = r8028 + r8029;
        double r8031 = r8025 - r8030;
        double r8032 = 1.644625965014904;
        bool r8033 = r8017 <= r8032;
        double r8034 = 2;
        double r8035 = fma(r8017, r8017, r8034);
        double r8036 = fma(r8034, r8026, r8035);
        double r8037 = sqrt(r8036);
        double r8038 = r8020 / r8034;
        double r8039 = -r8038;
        double r8040 = pow(r8037, r8039);
        double r8041 = r8040 * r8040;
        double r8042 = r8017 / r8024;
        double r8043 = -r8026;
        double r8044 = r8043 / r8027;
        double r8045 = fma(r8041, r8042, r8044);
        double r8046 = r8029 - r8028;
        double r8047 = r8017 * r8017;
        double r8048 = r8029 / r8047;
        double r8049 = r8046 - r8048;
        double r8050 = r8033 ? r8045 : r8049;
        double r8051 = r8019 ? r8031 : r8050;
        return r8051;
}

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 r8052, r8053, r8054, r8055, r8056, r8057, r8058, r8059, r8060, r8061, r8062, r8063, r8064, r8065, r8066, r8067, r8068, r8069, r8070, r8071;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8052);
        mpfr_init_set_str(r8053, "1", 10, MPFR_RNDN);
        mpfr_init(r8054);
        mpfr_init(r8055);
        mpfr_init(r8056);
        mpfr_init(r8057);
        mpfr_init(r8058);
        mpfr_init(r8059);
        mpfr_init(r8060);
        mpfr_init(r8061);
        mpfr_init(r8062);
        mpfr_init_set_str(r8063, "2", 10, MPFR_RNDN);
        mpfr_init(r8064);
        mpfr_init(r8065);
        mpfr_init(r8066);
        mpfr_init(r8067);
        mpfr_init(r8068);
        mpfr_init(r8069);
        mpfr_init(r8070);
        mpfr_init(r8071);
}

double f_im(double F, double B, double x) {
        mpfr_set_d(r8052, x, MPFR_RNDN);
        ;
        mpfr_set_d(r8054, B, MPFR_RNDN);
        mpfr_tan(r8055, r8054, MPFR_RNDN);
        mpfr_div(r8056, r8053, r8055, MPFR_RNDN);
        mpfr_mul(r8057, r8052, r8056, MPFR_RNDN);
        mpfr_neg(r8058, r8057, MPFR_RNDN);
        mpfr_set_d(r8059, F, MPFR_RNDN);
        mpfr_sin(r8060, r8054, MPFR_RNDN);
        mpfr_div(r8061, r8059, r8060, MPFR_RNDN);
        mpfr_mul(r8062, r8059, r8059, MPFR_RNDN);
        ;
        mpfr_add(r8064, r8062, r8063, MPFR_RNDN);
        mpfr_mul(r8065, r8063, r8052, MPFR_RNDN);
        mpfr_add(r8066, r8064, r8065, MPFR_RNDN);
        mpfr_div(r8067, r8053, r8063, MPFR_RNDN);
        mpfr_neg(r8068, r8067, MPFR_RNDN);
        mpfr_pow(r8069, r8066, r8068, MPFR_RNDN);
        mpfr_mul(r8070, r8061, r8069, MPFR_RNDN);
        mpfr_add(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, r8088, r8089, r8090, r8091, r8092, r8093, r8094, r8095, r8096, r8097, r8098, r8099, r8100, r8101, r8102, r8103, r8104, r8105, r8106;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8072);
        mpfr_init_set_str(r8073, "-2.488577931529309e+83", 10, MPFR_RNDN);
        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(r8082);
        mpfr_init(r8083);
        mpfr_init(r8084);
        mpfr_init(r8085);
        mpfr_init(r8086);
        mpfr_init_set_str(r8087, "1.644625965014904", 10, MPFR_RNDN);
        mpfr_init(r8088);
        mpfr_init_set_str(r8089, "2", 10, MPFR_RNDN);
        mpfr_init(r8090);
        mpfr_init(r8091);
        mpfr_init(r8092);
        mpfr_init(r8093);
        mpfr_init(r8094);
        mpfr_init(r8095);
        mpfr_init(r8096);
        mpfr_init(r8097);
        mpfr_init(r8098);
        mpfr_init(r8099);
        mpfr_init(r8100);
        mpfr_init(r8101);
        mpfr_init(r8102);
        mpfr_init(r8103);
        mpfr_init(r8104);
        mpfr_init(r8105);
        mpfr_init(r8106);
}

double f_fm(double F, double B, double x) {
        mpfr_set_d(r8072, F, MPFR_RNDN);
        ;
        mpfr_set_si(r8074, mpfr_cmp(r8072, r8073) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r8076, r8075, r8072, MPFR_RNDN);
        mpfr_div(r8077, r8076, r8072, MPFR_RNDN);
        mpfr_set_d(r8078, B, MPFR_RNDN);
        mpfr_sin(r8079, r8078, MPFR_RNDN);
        mpfr_div(r8080, r8077, r8079, MPFR_RNDN);
        mpfr_set_d(r8081, x, MPFR_RNDN);
        mpfr_tan(r8082, r8078, MPFR_RNDN);
        mpfr_div(r8083, r8081, r8082, MPFR_RNDN);
        mpfr_div(r8084, r8075, r8079, MPFR_RNDN);
        mpfr_add(r8085, r8083, r8084, MPFR_RNDN);
        mpfr_sub(r8086, r8080, r8085, MPFR_RNDN);
        ;
        mpfr_set_si(r8088, mpfr_cmp(r8072, r8087) <= 0, MPFR_RNDN);
        ;
        mpfr_fma(r8090, r8072, r8072, r8089, MPFR_RNDN);
        mpfr_fma(r8091, r8089, r8081, r8090, MPFR_RNDN);
        mpfr_sqrt(r8092, r8091, MPFR_RNDN);
        mpfr_div(r8093, r8075, r8089, MPFR_RNDN);
        mpfr_neg(r8094, r8093, MPFR_RNDN);
        mpfr_pow(r8095, r8092, r8094, MPFR_RNDN);
        mpfr_mul(r8096, r8095, r8095, MPFR_RNDN);
        mpfr_div(r8097, r8072, r8079, MPFR_RNDN);
        mpfr_neg(r8098, r8081, MPFR_RNDN);
        mpfr_div(r8099, r8098, r8082, MPFR_RNDN);
        mpfr_fma(r8100, r8096, r8097, r8099, MPFR_RNDN);
        mpfr_sub(r8101, r8084, r8083, MPFR_RNDN);
        mpfr_mul(r8102, r8072, r8072, MPFR_RNDN);
        mpfr_div(r8103, r8084, r8102, MPFR_RNDN);
        mpfr_sub(r8104, r8101, r8103, MPFR_RNDN);
        if (mpfr_get_si(r8088, MPFR_RNDN)) { mpfr_set(r8105, r8100, MPFR_RNDN); } else { mpfr_set(r8105, r8104, MPFR_RNDN); };
        if (mpfr_get_si(r8074, MPFR_RNDN)) { mpfr_set(r8106, r8086, MPFR_RNDN); } else { mpfr_set(r8106, r8105, MPFR_RNDN); };
        return mpfr_get_d(r8106, MPFR_RNDN);
}

static mpfr_t r8107, r8108, r8109, r8110, r8111, r8112, r8113, r8114, r8115, r8116, r8117, r8118, r8119, r8120, r8121, r8122, r8123, r8124, r8125, r8126, r8127, r8128, r8129, r8130, r8131, r8132, r8133, r8134, r8135, r8136, r8137, r8138, r8139, r8140, r8141;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8107);
        mpfr_init_set_str(r8108, "-2.488577931529309e+83", 10, MPFR_RNDN);
        mpfr_init(r8109);
        mpfr_init_set_str(r8110, "1", 10, MPFR_RNDN);
        mpfr_init(r8111);
        mpfr_init(r8112);
        mpfr_init(r8113);
        mpfr_init(r8114);
        mpfr_init(r8115);
        mpfr_init(r8116);
        mpfr_init(r8117);
        mpfr_init(r8118);
        mpfr_init(r8119);
        mpfr_init(r8120);
        mpfr_init(r8121);
        mpfr_init_set_str(r8122, "1.644625965014904", 10, MPFR_RNDN);
        mpfr_init(r8123);
        mpfr_init_set_str(r8124, "2", 10, MPFR_RNDN);
        mpfr_init(r8125);
        mpfr_init(r8126);
        mpfr_init(r8127);
        mpfr_init(r8128);
        mpfr_init(r8129);
        mpfr_init(r8130);
        mpfr_init(r8131);
        mpfr_init(r8132);
        mpfr_init(r8133);
        mpfr_init(r8134);
        mpfr_init(r8135);
        mpfr_init(r8136);
        mpfr_init(r8137);
        mpfr_init(r8138);
        mpfr_init(r8139);
        mpfr_init(r8140);
        mpfr_init(r8141);
}

double f_dm(double F, double B, double x) {
        mpfr_set_d(r8107, F, MPFR_RNDN);
        ;
        mpfr_set_si(r8109, mpfr_cmp(r8107, r8108) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r8111, r8110, r8107, MPFR_RNDN);
        mpfr_div(r8112, r8111, r8107, MPFR_RNDN);
        mpfr_set_d(r8113, B, MPFR_RNDN);
        mpfr_sin(r8114, r8113, MPFR_RNDN);
        mpfr_div(r8115, r8112, r8114, MPFR_RNDN);
        mpfr_set_d(r8116, x, MPFR_RNDN);
        mpfr_tan(r8117, r8113, MPFR_RNDN);
        mpfr_div(r8118, r8116, r8117, MPFR_RNDN);
        mpfr_div(r8119, r8110, r8114, MPFR_RNDN);
        mpfr_add(r8120, r8118, r8119, MPFR_RNDN);
        mpfr_sub(r8121, r8115, r8120, MPFR_RNDN);
        ;
        mpfr_set_si(r8123, mpfr_cmp(r8107, r8122) <= 0, MPFR_RNDN);
        ;
        mpfr_fma(r8125, r8107, r8107, r8124, MPFR_RNDN);
        mpfr_fma(r8126, r8124, r8116, r8125, MPFR_RNDN);
        mpfr_sqrt(r8127, r8126, MPFR_RNDN);
        mpfr_div(r8128, r8110, r8124, MPFR_RNDN);
        mpfr_neg(r8129, r8128, MPFR_RNDN);
        mpfr_pow(r8130, r8127, r8129, MPFR_RNDN);
        mpfr_mul(r8131, r8130, r8130, MPFR_RNDN);
        mpfr_div(r8132, r8107, r8114, MPFR_RNDN);
        mpfr_neg(r8133, r8116, MPFR_RNDN);
        mpfr_div(r8134, r8133, r8117, MPFR_RNDN);
        mpfr_fma(r8135, r8131, r8132, r8134, MPFR_RNDN);
        mpfr_sub(r8136, r8119, r8118, MPFR_RNDN);
        mpfr_mul(r8137, r8107, r8107, MPFR_RNDN);
        mpfr_div(r8138, r8119, r8137, MPFR_RNDN);
        mpfr_sub(r8139, r8136, r8138, MPFR_RNDN);
        if (mpfr_get_si(r8123, MPFR_RNDN)) { mpfr_set(r8140, r8135, MPFR_RNDN); } else { mpfr_set(r8140, r8139, MPFR_RNDN); };
        if (mpfr_get_si(r8109, MPFR_RNDN)) { mpfr_set(r8141, r8121, MPFR_RNDN); } else { mpfr_set(r8141, r8140, MPFR_RNDN); };
        return mpfr_get_d(r8141, MPFR_RNDN);
}

