#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 r8154 = x;
        float r8155 = 1;
        float r8156 = B;
        float r8157 = tan(r8156);
        float r8158 = r8155 / r8157;
        float r8159 = r8154 * r8158;
        float r8160 = -r8159;
        float r8161 = F;
        float r8162 = sin(r8156);
        float r8163 = r8161 / r8162;
        float r8164 = r8161 * r8161;
        float r8165 = 2;
        float r8166 = r8164 + r8165;
        float r8167 = r8165 * r8154;
        float r8168 = r8166 + r8167;
        float r8169 = r8155 / r8165;
        float r8170 = -r8169;
        float r8171 = pow(r8168, r8170);
        float r8172 = r8163 * r8171;
        float r8173 = r8160 + r8172;
        return r8173;
}

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


double f_of(float F, float B, float x) {
        float r8194 = 2;
        float r8195 = x;
        float r8196 = F;
        float r8197 = fma(r8196, r8196, r8194);
        float r8198 = fma(r8194, r8195, r8197);
        float r8199 = 1;
        float r8200 = -r8199;
        float r8201 = r8200 / r8194;
        float r8202 = pow(r8198, r8201);
        float r8203 = B;
        float r8204 = sin(r8203);
        float r8205 = r8199 / r8204;
        float r8206 = r8196 * r8205;
        float r8207 = -r8195;
        float r8208 = tan(r8203);
        float r8209 = r8207 / r8208;
        float r8210 = fma(r8202, r8206, r8209);
        return r8210;
}

double f_od(double F, double B, double x) {
        double r8211 = 2;
        double r8212 = x;
        double r8213 = F;
        double r8214 = fma(r8213, r8213, r8211);
        double r8215 = fma(r8211, r8212, r8214);
        double r8216 = 1;
        double r8217 = -r8216;
        double r8218 = r8217 / r8211;
        double r8219 = pow(r8215, r8218);
        double r8220 = B;
        double r8221 = sin(r8220);
        double r8222 = r8216 / r8221;
        double r8223 = r8213 * r8222;
        double r8224 = -r8212;
        double r8225 = tan(r8220);
        double r8226 = r8224 / r8225;
        double r8227 = fma(r8219, r8223, r8226);
        return r8227;
}

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 r8228, r8229, r8230, r8231, r8232, r8233, r8234, r8235, r8236, r8237, r8238, r8239, r8240, r8241, r8242, r8243, r8244, r8245, r8246, r8247;

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

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

static mpfr_t r8248, r8249, r8250, r8251, r8252, r8253, r8254, r8255, r8256, r8257, r8258, r8259, r8260, r8261, r8262, r8263, r8264;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8248, "2", 10, MPFR_RNDN);
        mpfr_init(r8249);
        mpfr_init(r8250);
        mpfr_init(r8251);
        mpfr_init(r8252);
        mpfr_init_set_str(r8253, "1", 10, MPFR_RNDN);
        mpfr_init(r8254);
        mpfr_init(r8255);
        mpfr_init(r8256);
        mpfr_init(r8257);
        mpfr_init(r8258);
        mpfr_init(r8259);
        mpfr_init(r8260);
        mpfr_init(r8261);
        mpfr_init(r8262);
        mpfr_init(r8263);
        mpfr_init(r8264);
}

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

static mpfr_t r8265, r8266, r8267, r8268, r8269, r8270, r8271, r8272, r8273, r8274, r8275, r8276, r8277, r8278, r8279, r8280, r8281;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8265, "2", 10, MPFR_RNDN);
        mpfr_init(r8266);
        mpfr_init(r8267);
        mpfr_init(r8268);
        mpfr_init(r8269);
        mpfr_init_set_str(r8270, "1", 10, MPFR_RNDN);
        mpfr_init(r8271);
        mpfr_init(r8272);
        mpfr_init(r8273);
        mpfr_init(r8274);
        mpfr_init(r8275);
        mpfr_init(r8276);
        mpfr_init(r8277);
        mpfr_init(r8278);
        mpfr_init(r8279);
        mpfr_init(r8280);
        mpfr_init(r8281);
}

double f_dm(double F, double B, double x) {
        ;
        mpfr_set_d(r8266, x, MPFR_RNDN);
        mpfr_set_d(r8267, F, MPFR_RNDN);
        mpfr_fma(r8268, r8267, r8267, r8265, MPFR_RNDN);
        mpfr_fma(r8269, r8265, r8266, r8268, MPFR_RNDN);
        ;
        mpfr_neg(r8271, r8270, MPFR_RNDN);
        mpfr_div(r8272, r8271, r8265, MPFR_RNDN);
        mpfr_pow(r8273, r8269, r8272, MPFR_RNDN);
        mpfr_set_d(r8274, B, MPFR_RNDN);
        mpfr_sin(r8275, r8274, MPFR_RNDN);
        mpfr_div(r8276, r8270, r8275, MPFR_RNDN);
        mpfr_mul(r8277, r8267, r8276, MPFR_RNDN);
        mpfr_neg(r8278, r8266, MPFR_RNDN);
        mpfr_tan(r8279, r8274, MPFR_RNDN);
        mpfr_div(r8280, r8278, r8279, MPFR_RNDN);
        mpfr_fma(r8281, r8273, r8277, r8280, MPFR_RNDN);
        return mpfr_get_d(r8281, MPFR_RNDN);
}

