#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 r7446 = atan2(1.0, 0.0);
        float r7447 = l;
        float r7448 = r7446 * r7447;
        float r7449 = 1.0f;
        float r7450 = F;
        float r7451 = r7450 * r7450;
        float r7452 = r7449 / r7451;
        float r7453 = tan(r7448);
        float r7454 = r7452 * r7453;
        float r7455 = r7448 - r7454;
        return r7455;
}

double f_id(double F, double l) {
        double r7456 = atan2(1.0, 0.0);
        double r7457 = l;
        double r7458 = r7456 * r7457;
        double r7459 = 1.0;
        double r7460 = F;
        double r7461 = r7460 * r7460;
        double r7462 = r7459 / r7461;
        double r7463 = tan(r7458);
        double r7464 = r7462 * r7463;
        double r7465 = r7458 - r7464;
        return r7465;
}


double f_of(float F, float l) {
        float r7466 = atan2(1.0, 0.0);
        float r7467 = l;
        float r7468 = r7466 * r7467;
        float r7469 = sin(r7468);
        float r7470 = cbrt(r7466);
        float r7471 = cbrt(r7467);
        float r7472 = r7470 * r7471;
        float r7473 = cbrt(r7468);
        float r7474 = r7473 * r7473;
        float r7475 = r7472 * r7474;
        float r7476 = cos(r7475);
        float r7477 = F;
        float r7478 = 2.0f;
        float r7479 = pow(r7477, r7478);
        float r7480 = r7476 * r7479;
        float r7481 = r7469 / r7480;
        float r7482 = r7468 - r7481;
        return r7482;
}

double f_od(double F, double l) {
        double r7483 = atan2(1.0, 0.0);
        double r7484 = l;
        double r7485 = r7483 * r7484;
        double r7486 = sin(r7485);
        double r7487 = cbrt(r7483);
        double r7488 = cbrt(r7484);
        double r7489 = r7487 * r7488;
        double r7490 = cbrt(r7485);
        double r7491 = r7490 * r7490;
        double r7492 = r7489 * r7491;
        double r7493 = cos(r7492);
        double r7494 = F;
        double r7495 = 2.0;
        double r7496 = pow(r7494, r7495);
        double r7497 = r7493 * r7496;
        double r7498 = r7486 / r7497;
        double r7499 = r7485 - r7498;
        return r7499;
}

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 r7500, r7501, r7502, r7503, r7504, r7505, r7506, r7507, r7508, r7509;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r7500);
        mpfr_init(r7501);
        mpfr_init(r7502);
        mpfr_init_set_str(r7503, "1", 10, MPFR_RNDN);
        mpfr_init(r7504);
        mpfr_init(r7505);
        mpfr_init(r7506);
        mpfr_init(r7507);
        mpfr_init(r7508);
        mpfr_init(r7509);
}

double f_im(double F, double l) {
        mpfr_const_pi(r7500, MPFR_RNDN);
        mpfr_set_d(r7501, l, MPFR_RNDN);
        mpfr_mul(r7502, r7500, r7501, MPFR_RNDN);
        ;
        mpfr_set_d(r7504, F, MPFR_RNDN);
        mpfr_mul(r7505, r7504, r7504, MPFR_RNDN);
        mpfr_div(r7506, r7503, r7505, MPFR_RNDN);
        mpfr_tan(r7507, r7502, MPFR_RNDN);
        mpfr_mul(r7508, r7506, r7507, MPFR_RNDN);
        mpfr_sub(r7509, r7502, r7508, MPFR_RNDN);
        return mpfr_get_d(r7509, MPFR_RNDN);
}

static mpfr_t r7510, r7511, r7512, r7513, r7514, r7515, r7516, r7517, r7518, r7519, r7520, r7521, r7522, r7523, r7524, r7525, r7526;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r7510);
        mpfr_init(r7511);
        mpfr_init(r7512);
        mpfr_init(r7513);
        mpfr_init(r7514);
        mpfr_init(r7515);
        mpfr_init(r7516);
        mpfr_init(r7517);
        mpfr_init(r7518);
        mpfr_init(r7519);
        mpfr_init(r7520);
        mpfr_init(r7521);
        mpfr_init_set_str(r7522, "2", 10, MPFR_RNDN);
        mpfr_init(r7523);
        mpfr_init(r7524);
        mpfr_init(r7525);
        mpfr_init(r7526);
}

double f_fm(double F, double l) {
        mpfr_const_pi(r7510, MPFR_RNDN);
        mpfr_set_d(r7511, l, MPFR_RNDN);
        mpfr_mul(r7512, r7510, r7511, MPFR_RNDN);
        mpfr_sin(r7513, r7512, MPFR_RNDN);
        mpfr_cbrt(r7514, r7510, MPFR_RNDN);
        mpfr_cbrt(r7515, r7511, MPFR_RNDN);
        mpfr_mul(r7516, r7514, r7515, MPFR_RNDN);
        mpfr_cbrt(r7517, r7512, MPFR_RNDN);
        mpfr_mul(r7518, r7517, r7517, MPFR_RNDN);
        mpfr_mul(r7519, r7516, r7518, MPFR_RNDN);
        mpfr_cos(r7520, r7519, MPFR_RNDN);
        mpfr_set_d(r7521, F, MPFR_RNDN);
        ;
        mpfr_pow(r7523, r7521, r7522, MPFR_RNDN);
        mpfr_mul(r7524, r7520, r7523, MPFR_RNDN);
        mpfr_div(r7525, r7513, r7524, MPFR_RNDN);
        mpfr_sub(r7526, r7512, r7525, MPFR_RNDN);
        return mpfr_get_d(r7526, MPFR_RNDN);
}

static mpfr_t r7527, r7528, r7529, r7530, r7531, r7532, r7533, r7534, r7535, r7536, r7537, r7538, r7539, r7540, r7541, r7542, r7543;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r7527);
        mpfr_init(r7528);
        mpfr_init(r7529);
        mpfr_init(r7530);
        mpfr_init(r7531);
        mpfr_init(r7532);
        mpfr_init(r7533);
        mpfr_init(r7534);
        mpfr_init(r7535);
        mpfr_init(r7536);
        mpfr_init(r7537);
        mpfr_init(r7538);
        mpfr_init_set_str(r7539, "2", 10, MPFR_RNDN);
        mpfr_init(r7540);
        mpfr_init(r7541);
        mpfr_init(r7542);
        mpfr_init(r7543);
}

double f_dm(double F, double l) {
        mpfr_const_pi(r7527, MPFR_RNDN);
        mpfr_set_d(r7528, l, MPFR_RNDN);
        mpfr_mul(r7529, r7527, r7528, MPFR_RNDN);
        mpfr_sin(r7530, r7529, MPFR_RNDN);
        mpfr_cbrt(r7531, r7527, MPFR_RNDN);
        mpfr_cbrt(r7532, r7528, MPFR_RNDN);
        mpfr_mul(r7533, r7531, r7532, MPFR_RNDN);
        mpfr_cbrt(r7534, r7529, MPFR_RNDN);
        mpfr_mul(r7535, r7534, r7534, MPFR_RNDN);
        mpfr_mul(r7536, r7533, r7535, MPFR_RNDN);
        mpfr_cos(r7537, r7536, MPFR_RNDN);
        mpfr_set_d(r7538, F, MPFR_RNDN);
        ;
        mpfr_pow(r7540, r7538, r7539, MPFR_RNDN);
        mpfr_mul(r7541, r7537, r7540, MPFR_RNDN);
        mpfr_div(r7542, r7530, r7541, MPFR_RNDN);
        mpfr_sub(r7543, r7529, r7542, MPFR_RNDN);
        return mpfr_get_d(r7543, MPFR_RNDN);
}

