#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 r8134 = x;
        float r8135 = 1;
        float r8136 = B;
        float r8137 = tan(r8136);
        float r8138 = r8135 / r8137;
        float r8139 = r8134 * r8138;
        float r8140 = -r8139;
        float r8141 = F;
        float r8142 = sin(r8136);
        float r8143 = r8141 / r8142;
        float r8144 = r8141 * r8141;
        float r8145 = 2;
        float r8146 = r8144 + r8145;
        float r8147 = r8145 * r8134;
        float r8148 = r8146 + r8147;
        float r8149 = r8135 / r8145;
        float r8150 = -r8149;
        float r8151 = pow(r8148, r8150);
        float r8152 = r8143 * r8151;
        float r8153 = r8140 + r8152;
        return r8153;
}

double f_id(double F, double B, double x) {
        double r8154 = x;
        double r8155 = 1;
        double r8156 = B;
        double r8157 = tan(r8156);
        double r8158 = r8155 / r8157;
        double r8159 = r8154 * r8158;
        double r8160 = -r8159;
        double r8161 = F;
        double r8162 = sin(r8156);
        double r8163 = r8161 / r8162;
        double r8164 = r8161 * r8161;
        double r8165 = 2;
        double r8166 = r8164 + r8165;
        double r8167 = r8165 * r8154;
        double r8168 = r8166 + r8167;
        double r8169 = r8155 / r8165;
        double r8170 = -r8169;
        double r8171 = pow(r8168, r8170);
        double r8172 = r8163 * r8171;
        double r8173 = r8160 + r8172;
        return r8173;
}


double f_of(float F, float B, float x) {
        float r8174 = 2;
        float r8175 = x;
        float r8176 = F;
        float r8177 = fma(r8176, r8176, r8174);
        float r8178 = fma(r8174, r8175, r8177);
        float r8179 = 1;
        float r8180 = -r8179;
        float r8181 = r8180 / r8174;
        float r8182 = pow(r8178, r8181);
        float r8183 = B;
        float r8184 = sin(r8183);
        float r8185 = r8179 / r8184;
        float r8186 = r8176 * r8185;
        float r8187 = -r8175;
        float r8188 = tan(r8183);
        float r8189 = r8187 / r8188;
        float r8190 = fma(r8182, r8186, r8189);
        return r8190;
}

double f_od(double F, double B, double x) {
        double r8191 = 2;
        double r8192 = x;
        double r8193 = F;
        double r8194 = fma(r8193, r8193, r8191);
        double r8195 = fma(r8191, r8192, r8194);
        double r8196 = 1;
        double r8197 = -r8196;
        double r8198 = r8197 / r8191;
        double r8199 = pow(r8195, r8198);
        double r8200 = B;
        double r8201 = sin(r8200);
        double r8202 = r8196 / r8201;
        double r8203 = r8193 * r8202;
        double r8204 = -r8192;
        double r8205 = tan(r8200);
        double r8206 = r8204 / r8205;
        double r8207 = fma(r8199, r8203, r8206);
        return r8207;
}

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 r8208, r8209, r8210, r8211, r8212, r8213, r8214, r8215, r8216, r8217, r8218, r8219, r8220, r8221, r8222, r8223, r8224, r8225, r8226, r8227;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8208);
        mpfr_init_set_str(r8209, "1", 10, MPFR_RNDN);
        mpfr_init(r8210);
        mpfr_init(r8211);
        mpfr_init(r8212);
        mpfr_init(r8213);
        mpfr_init(r8214);
        mpfr_init(r8215);
        mpfr_init(r8216);
        mpfr_init(r8217);
        mpfr_init(r8218);
        mpfr_init_set_str(r8219, "2", 10, MPFR_RNDN);
        mpfr_init(r8220);
        mpfr_init(r8221);
        mpfr_init(r8222);
        mpfr_init(r8223);
        mpfr_init(r8224);
        mpfr_init(r8225);
        mpfr_init(r8226);
        mpfr_init(r8227);
}

double f_im(double F, double B, double x) {
        mpfr_set_d(r8208, x, MPFR_RNDN);
        ;
        mpfr_set_d(r8210, B, MPFR_RNDN);
        mpfr_tan(r8211, r8210, MPFR_RNDN);
        mpfr_div(r8212, r8209, r8211, MPFR_RNDN);
        mpfr_mul(r8213, r8208, r8212, MPFR_RNDN);
        mpfr_neg(r8214, r8213, MPFR_RNDN);
        mpfr_set_d(r8215, F, MPFR_RNDN);
        mpfr_sin(r8216, r8210, MPFR_RNDN);
        mpfr_div(r8217, r8215, r8216, MPFR_RNDN);
        mpfr_mul(r8218, r8215, r8215, MPFR_RNDN);
        ;
        mpfr_add(r8220, r8218, r8219, MPFR_RNDN);
        mpfr_mul(r8221, r8219, r8208, MPFR_RNDN);
        mpfr_add(r8222, r8220, r8221, MPFR_RNDN);
        mpfr_div(r8223, r8209, r8219, MPFR_RNDN);
        mpfr_neg(r8224, r8223, MPFR_RNDN);
        mpfr_pow(r8225, r8222, r8224, MPFR_RNDN);
        mpfr_mul(r8226, r8217, r8225, MPFR_RNDN);
        mpfr_add(r8227, r8214, r8226, MPFR_RNDN);
        return mpfr_get_d(r8227, MPFR_RNDN);
}

static mpfr_t r8228, r8229, r8230, r8231, r8232, r8233, r8234, r8235, r8236, r8237, r8238, r8239, r8240, r8241, r8242, r8243, r8244;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8228, "2", 10, MPFR_RNDN);
        mpfr_init(r8229);
        mpfr_init(r8230);
        mpfr_init(r8231);
        mpfr_init(r8232);
        mpfr_init_set_str(r8233, "1", 10, MPFR_RNDN);
        mpfr_init(r8234);
        mpfr_init(r8235);
        mpfr_init(r8236);
        mpfr_init(r8237);
        mpfr_init(r8238);
        mpfr_init(r8239);
        mpfr_init(r8240);
        mpfr_init(r8241);
        mpfr_init(r8242);
        mpfr_init(r8243);
        mpfr_init(r8244);
}

double f_fm(double F, double B, double x) {
        ;
        mpfr_set_d(r8229, x, MPFR_RNDN);
        mpfr_set_d(r8230, F, MPFR_RNDN);
        mpfr_fma(r8231, r8230, r8230, r8228, MPFR_RNDN);
        mpfr_fma(r8232, r8228, r8229, r8231, MPFR_RNDN);
        ;
        mpfr_neg(r8234, r8233, MPFR_RNDN);
        mpfr_div(r8235, r8234, r8228, MPFR_RNDN);
        mpfr_pow(r8236, r8232, r8235, MPFR_RNDN);
        mpfr_set_d(r8237, B, MPFR_RNDN);
        mpfr_sin(r8238, r8237, MPFR_RNDN);
        mpfr_div(r8239, r8233, r8238, MPFR_RNDN);
        mpfr_mul(r8240, r8230, r8239, MPFR_RNDN);
        mpfr_neg(r8241, r8229, MPFR_RNDN);
        mpfr_tan(r8242, r8237, MPFR_RNDN);
        mpfr_div(r8243, r8241, r8242, MPFR_RNDN);
        mpfr_fma(r8244, r8236, r8240, r8243, MPFR_RNDN);
        return mpfr_get_d(r8244, MPFR_RNDN);
}

static mpfr_t r8245, r8246, r8247, r8248, r8249, r8250, r8251, r8252, r8253, r8254, r8255, r8256, r8257, r8258, r8259, r8260, r8261;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8245, "2", 10, MPFR_RNDN);
        mpfr_init(r8246);
        mpfr_init(r8247);
        mpfr_init(r8248);
        mpfr_init(r8249);
        mpfr_init_set_str(r8250, "1", 10, MPFR_RNDN);
        mpfr_init(r8251);
        mpfr_init(r8252);
        mpfr_init(r8253);
        mpfr_init(r8254);
        mpfr_init(r8255);
        mpfr_init(r8256);
        mpfr_init(r8257);
        mpfr_init(r8258);
        mpfr_init(r8259);
        mpfr_init(r8260);
        mpfr_init(r8261);
}

double f_dm(double F, double B, double x) {
        ;
        mpfr_set_d(r8246, x, MPFR_RNDN);
        mpfr_set_d(r8247, F, MPFR_RNDN);
        mpfr_fma(r8248, r8247, r8247, r8245, MPFR_RNDN);
        mpfr_fma(r8249, r8245, r8246, r8248, MPFR_RNDN);
        ;
        mpfr_neg(r8251, r8250, MPFR_RNDN);
        mpfr_div(r8252, r8251, r8245, MPFR_RNDN);
        mpfr_pow(r8253, r8249, r8252, MPFR_RNDN);
        mpfr_set_d(r8254, B, MPFR_RNDN);
        mpfr_sin(r8255, r8254, MPFR_RNDN);
        mpfr_div(r8256, r8250, r8255, MPFR_RNDN);
        mpfr_mul(r8257, r8247, r8256, MPFR_RNDN);
        mpfr_neg(r8258, r8246, MPFR_RNDN);
        mpfr_tan(r8259, r8254, MPFR_RNDN);
        mpfr_div(r8260, r8258, r8259, MPFR_RNDN);
        mpfr_fma(r8261, r8253, r8257, r8260, MPFR_RNDN);
        return mpfr_get_d(r8261, MPFR_RNDN);
}

