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

char *name = "Falkner and Boettcher, Equation (20:1,3)";

double f_if(float v, float t) {
        float r33236 = 1;
        float r33237 = 5;
        float r33238 = v;
        float r33239 = r33238 * r33238;
        float r33240 = r33237 * r33239;
        float r33241 = r33236 - r33240;
        float r33242 = atan2(1.0, 0.0);
        float r33243 = t;
        float r33244 = r33242 * r33243;
        float r33245 = 2;
        float r33246 = 3;
        float r33247 = r33246 * r33239;
        float r33248 = r33236 - r33247;
        float r33249 = r33245 * r33248;
        float r33250 = sqrt(r33249);
        float r33251 = r33244 * r33250;
        float r33252 = r33236 - r33239;
        float r33253 = r33251 * r33252;
        float r33254 = r33241 / r33253;
        return r33254;
}

double f_id(double v, double t) {
        double r33255 = 1;
        double r33256 = 5;
        double r33257 = v;
        double r33258 = r33257 * r33257;
        double r33259 = r33256 * r33258;
        double r33260 = r33255 - r33259;
        double r33261 = atan2(1.0, 0.0);
        double r33262 = t;
        double r33263 = r33261 * r33262;
        double r33264 = 2;
        double r33265 = 3;
        double r33266 = r33265 * r33258;
        double r33267 = r33255 - r33266;
        double r33268 = r33264 * r33267;
        double r33269 = sqrt(r33268);
        double r33270 = r33263 * r33269;
        double r33271 = r33255 - r33258;
        double r33272 = r33270 * r33271;
        double r33273 = r33260 / r33272;
        return r33273;
}


double f_of(float v, float t) {
        float r33274 = 1;
        float r33275 = t;
        float r33276 = r33274 / r33275;
        float r33277 = atan2(1.0, 0.0);
        float r33278 = 2;
        float r33279 = sqrt(r33278);
        float r33280 = r33277 * r33279;
        float r33281 = r33276 / r33280;
        float r33282 = 4;
        float r33283 = r33282 / r33275;
        float r33284 = r33283 / r33279;
        float r33285 = v;
        float r33286 = pow(r33285, r33282);
        float r33287 = r33286 / r33277;
        float r33288 = r33277 / r33285;
        float r33289 = r33285 / r33288;
        float r33290 = r33287 + r33289;
        float r33291 = r33284 * r33290;
        float r33292 = r33281 - r33291;
        return r33292;
}

double f_od(double v, double t) {
        double r33293 = 1;
        double r33294 = t;
        double r33295 = r33293 / r33294;
        double r33296 = atan2(1.0, 0.0);
        double r33297 = 2;
        double r33298 = sqrt(r33297);
        double r33299 = r33296 * r33298;
        double r33300 = r33295 / r33299;
        double r33301 = 4;
        double r33302 = r33301 / r33294;
        double r33303 = r33302 / r33298;
        double r33304 = v;
        double r33305 = pow(r33304, r33301);
        double r33306 = r33305 / r33296;
        double r33307 = r33296 / r33304;
        double r33308 = r33304 / r33307;
        double r33309 = r33306 + r33308;
        double r33310 = r33303 * r33309;
        double r33311 = r33300 - r33310;
        return r33311;
}

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 r33312, r33313, r33314, r33315, r33316, r33317, r33318, r33319, r33320, r33321, r33322, r33323, r33324, r33325, r33326, r33327, r33328, r33329, r33330;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33312, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33313, "5", 10, MPFR_RNDN);
        mpfr_init(r33314);
        mpfr_init(r33315);
        mpfr_init(r33316);
        mpfr_init(r33317);
        mpfr_init(r33318);
        mpfr_init(r33319);
        mpfr_init(r33320);
        mpfr_init_set_str(r33321, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r33322, "3", 10, MPFR_RNDN);
        mpfr_init(r33323);
        mpfr_init(r33324);
        mpfr_init(r33325);
        mpfr_init(r33326);
        mpfr_init(r33327);
        mpfr_init(r33328);
        mpfr_init(r33329);
        mpfr_init(r33330);
}

double f_im(double v, double t) {
        ;
        ;
        mpfr_set_d(r33314, v, MPFR_RNDN);
        mpfr_mul(r33315, r33314, r33314, MPFR_RNDN);
        mpfr_mul(r33316, r33313, r33315, MPFR_RNDN);
        mpfr_sub(r33317, r33312, r33316, MPFR_RNDN);
        mpfr_const_pi(r33318, MPFR_RNDN);
        mpfr_set_d(r33319, t, MPFR_RNDN);
        mpfr_mul(r33320, r33318, r33319, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r33323, r33322, r33315, MPFR_RNDN);
        mpfr_sub(r33324, r33312, r33323, MPFR_RNDN);
        mpfr_mul(r33325, r33321, r33324, MPFR_RNDN);
        mpfr_sqrt(r33326, r33325, MPFR_RNDN);
        mpfr_mul(r33327, r33320, r33326, MPFR_RNDN);
        mpfr_sub(r33328, r33312, r33315, MPFR_RNDN);
        mpfr_mul(r33329, r33327, r33328, MPFR_RNDN);
        mpfr_div(r33330, r33317, r33329, MPFR_RNDN);
        return mpfr_get_d(r33330, MPFR_RNDN);
}

static mpfr_t r33331, r33332, r33333, r33334, r33335, r33336, r33337, r33338, r33339, r33340, r33341, r33342, r33343, r33344, r33345, r33346, r33347, r33348, r33349;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33331, "1", 10, MPFR_RNDN);
        mpfr_init(r33332);
        mpfr_init(r33333);
        mpfr_init(r33334);
        mpfr_init_set_str(r33335, "2", 10, MPFR_RNDN);
        mpfr_init(r33336);
        mpfr_init(r33337);
        mpfr_init(r33338);
        mpfr_init_set_str(r33339, "4", 10, MPFR_RNDN);
        mpfr_init(r33340);
        mpfr_init(r33341);
        mpfr_init(r33342);
        mpfr_init(r33343);
        mpfr_init(r33344);
        mpfr_init(r33345);
        mpfr_init(r33346);
        mpfr_init(r33347);
        mpfr_init(r33348);
        mpfr_init(r33349);
}

double f_fm(double v, double t) {
        ;
        mpfr_set_d(r33332, t, MPFR_RNDN);
        mpfr_div(r33333, r33331, r33332, MPFR_RNDN);
        mpfr_const_pi(r33334, MPFR_RNDN);
        ;
        mpfr_sqrt(r33336, r33335, MPFR_RNDN);
        mpfr_mul(r33337, r33334, r33336, MPFR_RNDN);
        mpfr_div(r33338, r33333, r33337, MPFR_RNDN);
        ;
        mpfr_div(r33340, r33339, r33332, MPFR_RNDN);
        mpfr_div(r33341, r33340, r33336, MPFR_RNDN);
        mpfr_set_d(r33342, v, MPFR_RNDN);
        mpfr_pow(r33343, r33342, r33339, MPFR_RNDN);
        mpfr_div(r33344, r33343, r33334, MPFR_RNDN);
        mpfr_div(r33345, r33334, r33342, MPFR_RNDN);
        mpfr_div(r33346, r33342, r33345, MPFR_RNDN);
        mpfr_add(r33347, r33344, r33346, MPFR_RNDN);
        mpfr_mul(r33348, r33341, r33347, MPFR_RNDN);
        mpfr_sub(r33349, r33338, r33348, MPFR_RNDN);
        return mpfr_get_d(r33349, MPFR_RNDN);
}

static mpfr_t r33350, r33351, r33352, r33353, r33354, r33355, r33356, r33357, r33358, r33359, r33360, r33361, r33362, r33363, r33364, r33365, r33366, r33367, r33368;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33350, "1", 10, MPFR_RNDN);
        mpfr_init(r33351);
        mpfr_init(r33352);
        mpfr_init(r33353);
        mpfr_init_set_str(r33354, "2", 10, MPFR_RNDN);
        mpfr_init(r33355);
        mpfr_init(r33356);
        mpfr_init(r33357);
        mpfr_init_set_str(r33358, "4", 10, MPFR_RNDN);
        mpfr_init(r33359);
        mpfr_init(r33360);
        mpfr_init(r33361);
        mpfr_init(r33362);
        mpfr_init(r33363);
        mpfr_init(r33364);
        mpfr_init(r33365);
        mpfr_init(r33366);
        mpfr_init(r33367);
        mpfr_init(r33368);
}

double f_dm(double v, double t) {
        ;
        mpfr_set_d(r33351, t, MPFR_RNDN);
        mpfr_div(r33352, r33350, r33351, MPFR_RNDN);
        mpfr_const_pi(r33353, MPFR_RNDN);
        ;
        mpfr_sqrt(r33355, r33354, MPFR_RNDN);
        mpfr_mul(r33356, r33353, r33355, MPFR_RNDN);
        mpfr_div(r33357, r33352, r33356, MPFR_RNDN);
        ;
        mpfr_div(r33359, r33358, r33351, MPFR_RNDN);
        mpfr_div(r33360, r33359, r33355, MPFR_RNDN);
        mpfr_set_d(r33361, v, MPFR_RNDN);
        mpfr_pow(r33362, r33361, r33358, MPFR_RNDN);
        mpfr_div(r33363, r33362, r33353, MPFR_RNDN);
        mpfr_div(r33364, r33353, r33361, MPFR_RNDN);
        mpfr_div(r33365, r33361, r33364, MPFR_RNDN);
        mpfr_add(r33366, r33363, r33365, MPFR_RNDN);
        mpfr_mul(r33367, r33360, r33366, MPFR_RNDN);
        mpfr_sub(r33368, r33357, r33367, MPFR_RNDN);
        return mpfr_get_d(r33368, MPFR_RNDN);
}

