#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 r7954 = x;
        float r7955 = 1;
        float r7956 = B;
        float r7957 = tan(r7956);
        float r7958 = r7955 / r7957;
        float r7959 = r7954 * r7958;
        float r7960 = -r7959;
        float r7961 = F;
        float r7962 = sin(r7956);
        float r7963 = r7961 / r7962;
        float r7964 = r7961 * r7961;
        float r7965 = 2;
        float r7966 = r7964 + r7965;
        float r7967 = r7965 * r7954;
        float r7968 = r7966 + r7967;
        float r7969 = r7955 / r7965;
        float r7970 = -r7969;
        float r7971 = pow(r7968, r7970);
        float r7972 = r7963 * r7971;
        float r7973 = r7960 + r7972;
        return r7973;
}

double f_id(double F, double B, double x) {
        double r7974 = x;
        double r7975 = 1;
        double r7976 = B;
        double r7977 = tan(r7976);
        double r7978 = r7975 / r7977;
        double r7979 = r7974 * r7978;
        double r7980 = -r7979;
        double r7981 = F;
        double r7982 = sin(r7976);
        double r7983 = r7981 / r7982;
        double r7984 = r7981 * r7981;
        double r7985 = 2;
        double r7986 = r7984 + r7985;
        double r7987 = r7985 * r7974;
        double r7988 = r7986 + r7987;
        double r7989 = r7975 / r7985;
        double r7990 = -r7989;
        double r7991 = pow(r7988, r7990);
        double r7992 = r7983 * r7991;
        double r7993 = r7980 + r7992;
        return r7993;
}


double f_of(float F, float B, float x) {
        float r7994 = F;
        float r7995 = -3.046573298696304e+83;
        bool r7996 = r7994 <= r7995;
        float r7997 = 1;
        float r7998 = r7997 / r7994;
        float r7999 = r7998 / r7994;
        float r8000 = B;
        float r8001 = sin(r8000);
        float r8002 = r7999 / r8001;
        float r8003 = r7997 / r8001;
        float r8004 = x;
        float r8005 = tan(r8000);
        float r8006 = r8004 / r8005;
        float r8007 = r8003 + r8006;
        float r8008 = r8002 - r8007;
        float r8009 = 1.644625965014904;
        bool r8010 = r7994 <= r8009;
        float r8011 = 2;
        float r8012 = r7994 * r7994;
        float r8013 = r8011 + r8012;
        float r8014 = r8011 * r8004;
        float r8015 = r8013 + r8014;
        float r8016 = r7997 / r8011;
        float r8017 = -r8016;
        float r8018 = pow(r8015, r8017);
        float r8019 = r7994 / r8001;
        float r8020 = r8018 * r8019;
        float r8021 = r8004 / r8001;
        float r8022 = cos(r8000);
        float r8023 = r8021 * r8022;
        float r8024 = r8020 - r8023;
        float r8025 = r8003 - r8006;
        float r8026 = r8003 / r8012;
        float r8027 = r8025 - r8026;
        float r8028 = r8010 ? r8024 : r8027;
        float r8029 = r7996 ? r8008 : r8028;
        return r8029;
}

double f_od(double F, double B, double x) {
        double r8030 = F;
        double r8031 = -3.046573298696304e+83;
        bool r8032 = r8030 <= r8031;
        double r8033 = 1;
        double r8034 = r8033 / r8030;
        double r8035 = r8034 / r8030;
        double r8036 = B;
        double r8037 = sin(r8036);
        double r8038 = r8035 / r8037;
        double r8039 = r8033 / r8037;
        double r8040 = x;
        double r8041 = tan(r8036);
        double r8042 = r8040 / r8041;
        double r8043 = r8039 + r8042;
        double r8044 = r8038 - r8043;
        double r8045 = 1.644625965014904;
        bool r8046 = r8030 <= r8045;
        double r8047 = 2;
        double r8048 = r8030 * r8030;
        double r8049 = r8047 + r8048;
        double r8050 = r8047 * r8040;
        double r8051 = r8049 + r8050;
        double r8052 = r8033 / r8047;
        double r8053 = -r8052;
        double r8054 = pow(r8051, r8053);
        double r8055 = r8030 / r8037;
        double r8056 = r8054 * r8055;
        double r8057 = r8040 / r8037;
        double r8058 = cos(r8036);
        double r8059 = r8057 * r8058;
        double r8060 = r8056 - r8059;
        double r8061 = r8039 - r8042;
        double r8062 = r8039 / r8048;
        double r8063 = r8061 - r8062;
        double r8064 = r8046 ? r8060 : r8063;
        double r8065 = r8032 ? r8044 : r8064;
        return r8065;
}

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 r8066, r8067, r8068, r8069, r8070, r8071, r8072, r8073, r8074, r8075, r8076, r8077, r8078, r8079, r8080, r8081, r8082, r8083, r8084, r8085;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8066);
        mpfr_init_set_str(r8067, "1", 10, MPFR_RNDN);
        mpfr_init(r8068);
        mpfr_init(r8069);
        mpfr_init(r8070);
        mpfr_init(r8071);
        mpfr_init(r8072);
        mpfr_init(r8073);
        mpfr_init(r8074);
        mpfr_init(r8075);
        mpfr_init(r8076);
        mpfr_init_set_str(r8077, "2", 10, MPFR_RNDN);
        mpfr_init(r8078);
        mpfr_init(r8079);
        mpfr_init(r8080);
        mpfr_init(r8081);
        mpfr_init(r8082);
        mpfr_init(r8083);
        mpfr_init(r8084);
        mpfr_init(r8085);
}

double f_im(double F, double B, double x) {
        mpfr_set_d(r8066, x, MPFR_RNDN);
        ;
        mpfr_set_d(r8068, B, MPFR_RNDN);
        mpfr_tan(r8069, r8068, MPFR_RNDN);
        mpfr_div(r8070, r8067, r8069, MPFR_RNDN);
        mpfr_mul(r8071, r8066, r8070, MPFR_RNDN);
        mpfr_neg(r8072, r8071, MPFR_RNDN);
        mpfr_set_d(r8073, F, MPFR_RNDN);
        mpfr_sin(r8074, r8068, MPFR_RNDN);
        mpfr_div(r8075, r8073, r8074, MPFR_RNDN);
        mpfr_mul(r8076, r8073, r8073, MPFR_RNDN);
        ;
        mpfr_add(r8078, r8076, r8077, MPFR_RNDN);
        mpfr_mul(r8079, r8077, r8066, MPFR_RNDN);
        mpfr_add(r8080, r8078, r8079, MPFR_RNDN);
        mpfr_div(r8081, r8067, r8077, MPFR_RNDN);
        mpfr_neg(r8082, r8081, MPFR_RNDN);
        mpfr_pow(r8083, r8080, r8082, MPFR_RNDN);
        mpfr_mul(r8084, r8075, r8083, MPFR_RNDN);
        mpfr_add(r8085, r8072, r8084, MPFR_RNDN);
        return mpfr_get_d(r8085, MPFR_RNDN);
}

static mpfr_t r8086, r8087, r8088, r8089, r8090, r8091, r8092, r8093, r8094, r8095, r8096, r8097, r8098, r8099, r8100, r8101, r8102, r8103, r8104, r8105, r8106, r8107, r8108, r8109, r8110, r8111, r8112, r8113, r8114, r8115, r8116, r8117, r8118, r8119, r8120, r8121;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8086);
        mpfr_init_set_str(r8087, "-3.046573298696304e+83", 10, MPFR_RNDN);
        mpfr_init(r8088);
        mpfr_init_set_str(r8089, "1", 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_set_str(r8101, "1.644625965014904", 10, MPFR_RNDN);
        mpfr_init(r8102);
        mpfr_init_set_str(r8103, "2", 10, MPFR_RNDN);
        mpfr_init(r8104);
        mpfr_init(r8105);
        mpfr_init(r8106);
        mpfr_init(r8107);
        mpfr_init(r8108);
        mpfr_init(r8109);
        mpfr_init(r8110);
        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);
}

double f_fm(double F, double B, double x) {
        mpfr_set_d(r8086, F, MPFR_RNDN);
        ;
        mpfr_set_si(r8088, mpfr_cmp(r8086, r8087) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r8090, r8089, r8086, MPFR_RNDN);
        mpfr_div(r8091, r8090, r8086, MPFR_RNDN);
        mpfr_set_d(r8092, B, MPFR_RNDN);
        mpfr_sin(r8093, r8092, MPFR_RNDN);
        mpfr_div(r8094, r8091, r8093, MPFR_RNDN);
        mpfr_div(r8095, r8089, r8093, MPFR_RNDN);
        mpfr_set_d(r8096, x, MPFR_RNDN);
        mpfr_tan(r8097, r8092, MPFR_RNDN);
        mpfr_div(r8098, r8096, r8097, MPFR_RNDN);
        mpfr_add(r8099, r8095, r8098, MPFR_RNDN);
        mpfr_sub(r8100, r8094, r8099, MPFR_RNDN);
        ;
        mpfr_set_si(r8102, mpfr_cmp(r8086, r8101) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r8104, r8086, r8086, MPFR_RNDN);
        mpfr_add(r8105, r8103, r8104, MPFR_RNDN);
        mpfr_mul(r8106, r8103, r8096, MPFR_RNDN);
        mpfr_add(r8107, r8105, r8106, MPFR_RNDN);
        mpfr_div(r8108, r8089, r8103, MPFR_RNDN);
        mpfr_neg(r8109, r8108, MPFR_RNDN);
        mpfr_pow(r8110, r8107, r8109, MPFR_RNDN);
        mpfr_div(r8111, r8086, r8093, MPFR_RNDN);
        mpfr_mul(r8112, r8110, r8111, MPFR_RNDN);
        mpfr_div(r8113, r8096, r8093, MPFR_RNDN);
        mpfr_cos(r8114, r8092, MPFR_RNDN);
        mpfr_mul(r8115, r8113, r8114, MPFR_RNDN);
        mpfr_sub(r8116, r8112, r8115, MPFR_RNDN);
        mpfr_sub(r8117, r8095, r8098, MPFR_RNDN);
        mpfr_div(r8118, r8095, r8104, MPFR_RNDN);
        mpfr_sub(r8119, r8117, r8118, MPFR_RNDN);
        if (mpfr_get_si(r8102, MPFR_RNDN)) { mpfr_set(r8120, r8116, MPFR_RNDN); } else { mpfr_set(r8120, r8119, MPFR_RNDN); };
        if (mpfr_get_si(r8088, MPFR_RNDN)) { mpfr_set(r8121, r8100, MPFR_RNDN); } else { mpfr_set(r8121, r8120, MPFR_RNDN); };
        return mpfr_get_d(r8121, MPFR_RNDN);
}

static mpfr_t r8122, r8123, r8124, r8125, r8126, r8127, r8128, r8129, r8130, r8131, r8132, r8133, r8134, r8135, r8136, r8137, r8138, r8139, r8140, r8141, r8142, r8143, r8144, r8145, r8146, r8147, r8148, r8149, r8150, r8151, r8152, r8153, r8154, r8155, r8156, r8157;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8122);
        mpfr_init_set_str(r8123, "-3.046573298696304e+83", 10, MPFR_RNDN);
        mpfr_init(r8124);
        mpfr_init_set_str(r8125, "1", 10, MPFR_RNDN);
        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_set_str(r8137, "1.644625965014904", 10, MPFR_RNDN);
        mpfr_init(r8138);
        mpfr_init_set_str(r8139, "2", 10, MPFR_RNDN);
        mpfr_init(r8140);
        mpfr_init(r8141);
        mpfr_init(r8142);
        mpfr_init(r8143);
        mpfr_init(r8144);
        mpfr_init(r8145);
        mpfr_init(r8146);
        mpfr_init(r8147);
        mpfr_init(r8148);
        mpfr_init(r8149);
        mpfr_init(r8150);
        mpfr_init(r8151);
        mpfr_init(r8152);
        mpfr_init(r8153);
        mpfr_init(r8154);
        mpfr_init(r8155);
        mpfr_init(r8156);
        mpfr_init(r8157);
}

double f_dm(double F, double B, double x) {
        mpfr_set_d(r8122, F, MPFR_RNDN);
        ;
        mpfr_set_si(r8124, mpfr_cmp(r8122, r8123) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r8126, r8125, r8122, MPFR_RNDN);
        mpfr_div(r8127, r8126, r8122, MPFR_RNDN);
        mpfr_set_d(r8128, B, MPFR_RNDN);
        mpfr_sin(r8129, r8128, MPFR_RNDN);
        mpfr_div(r8130, r8127, r8129, MPFR_RNDN);
        mpfr_div(r8131, r8125, r8129, MPFR_RNDN);
        mpfr_set_d(r8132, x, MPFR_RNDN);
        mpfr_tan(r8133, r8128, MPFR_RNDN);
        mpfr_div(r8134, r8132, r8133, MPFR_RNDN);
        mpfr_add(r8135, r8131, r8134, MPFR_RNDN);
        mpfr_sub(r8136, r8130, r8135, MPFR_RNDN);
        ;
        mpfr_set_si(r8138, mpfr_cmp(r8122, r8137) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r8140, r8122, r8122, MPFR_RNDN);
        mpfr_add(r8141, r8139, r8140, MPFR_RNDN);
        mpfr_mul(r8142, r8139, r8132, MPFR_RNDN);
        mpfr_add(r8143, r8141, r8142, MPFR_RNDN);
        mpfr_div(r8144, r8125, r8139, MPFR_RNDN);
        mpfr_neg(r8145, r8144, MPFR_RNDN);
        mpfr_pow(r8146, r8143, r8145, MPFR_RNDN);
        mpfr_div(r8147, r8122, r8129, MPFR_RNDN);
        mpfr_mul(r8148, r8146, r8147, MPFR_RNDN);
        mpfr_div(r8149, r8132, r8129, MPFR_RNDN);
        mpfr_cos(r8150, r8128, MPFR_RNDN);
        mpfr_mul(r8151, r8149, r8150, MPFR_RNDN);
        mpfr_sub(r8152, r8148, r8151, MPFR_RNDN);
        mpfr_sub(r8153, r8131, r8134, MPFR_RNDN);
        mpfr_div(r8154, r8131, r8140, MPFR_RNDN);
        mpfr_sub(r8155, r8153, r8154, MPFR_RNDN);
        if (mpfr_get_si(r8138, MPFR_RNDN)) { mpfr_set(r8156, r8152, MPFR_RNDN); } else { mpfr_set(r8156, r8155, MPFR_RNDN); };
        if (mpfr_get_si(r8124, MPFR_RNDN)) { mpfr_set(r8157, r8136, MPFR_RNDN); } else { mpfr_set(r8157, r8156, MPFR_RNDN); };
        return mpfr_get_d(r8157, MPFR_RNDN);
}

