#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 r33004 = 1;
        float r33005 = 5;
        float r33006 = v;
        float r33007 = r33006 * r33006;
        float r33008 = r33005 * r33007;
        float r33009 = r33004 - r33008;
        float r33010 = atan2(1.0, 0.0);
        float r33011 = t;
        float r33012 = r33010 * r33011;
        float r33013 = 2;
        float r33014 = 3;
        float r33015 = r33014 * r33007;
        float r33016 = r33004 - r33015;
        float r33017 = r33013 * r33016;
        float r33018 = sqrt(r33017);
        float r33019 = r33012 * r33018;
        float r33020 = r33004 - r33007;
        float r33021 = r33019 * r33020;
        float r33022 = r33009 / r33021;
        return r33022;
}

double f_id(double v, double t) {
        double r33023 = 1;
        double r33024 = 5;
        double r33025 = v;
        double r33026 = r33025 * r33025;
        double r33027 = r33024 * r33026;
        double r33028 = r33023 - r33027;
        double r33029 = atan2(1.0, 0.0);
        double r33030 = t;
        double r33031 = r33029 * r33030;
        double r33032 = 2;
        double r33033 = 3;
        double r33034 = r33033 * r33026;
        double r33035 = r33023 - r33034;
        double r33036 = r33032 * r33035;
        double r33037 = sqrt(r33036);
        double r33038 = r33031 * r33037;
        double r33039 = r33023 - r33026;
        double r33040 = r33038 * r33039;
        double r33041 = r33028 / r33040;
        return r33041;
}


double f_of(float v, float t) {
        float r33042 = 1;
        float r33043 = t;
        float r33044 = r33042 / r33043;
        float r33045 = atan2(1.0, 0.0);
        float r33046 = 2;
        float r33047 = sqrt(r33046);
        float r33048 = r33045 * r33047;
        float r33049 = r33044 / r33048;
        float r33050 = 4;
        float r33051 = r33050 / r33043;
        float r33052 = r33051 / r33047;
        float r33053 = v;
        float r33054 = pow(r33053, r33050);
        float r33055 = r33054 / r33045;
        float r33056 = r33045 / r33053;
        float r33057 = r33053 / r33056;
        float r33058 = r33055 + r33057;
        float r33059 = r33052 * r33058;
        float r33060 = r33049 - r33059;
        return r33060;
}

double f_od(double v, double t) {
        double r33061 = 1;
        double r33062 = t;
        double r33063 = r33061 / r33062;
        double r33064 = atan2(1.0, 0.0);
        double r33065 = 2;
        double r33066 = sqrt(r33065);
        double r33067 = r33064 * r33066;
        double r33068 = r33063 / r33067;
        double r33069 = 4;
        double r33070 = r33069 / r33062;
        double r33071 = r33070 / r33066;
        double r33072 = v;
        double r33073 = pow(r33072, r33069);
        double r33074 = r33073 / r33064;
        double r33075 = r33064 / r33072;
        double r33076 = r33072 / r33075;
        double r33077 = r33074 + r33076;
        double r33078 = r33071 * r33077;
        double r33079 = r33068 - r33078;
        return r33079;
}

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 r33080, r33081, r33082, r33083, r33084, r33085, r33086, r33087, r33088, r33089, r33090, r33091, r33092, r33093, r33094, r33095, r33096, r33097, r33098;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33080, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33081, "5", 10, MPFR_RNDN);
        mpfr_init(r33082);
        mpfr_init(r33083);
        mpfr_init(r33084);
        mpfr_init(r33085);
        mpfr_init(r33086);
        mpfr_init(r33087);
        mpfr_init(r33088);
        mpfr_init_set_str(r33089, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r33090, "3", 10, MPFR_RNDN);
        mpfr_init(r33091);
        mpfr_init(r33092);
        mpfr_init(r33093);
        mpfr_init(r33094);
        mpfr_init(r33095);
        mpfr_init(r33096);
        mpfr_init(r33097);
        mpfr_init(r33098);
}

double f_im(double v, double t) {
        ;
        ;
        mpfr_set_d(r33082, v, MPFR_RNDN);
        mpfr_mul(r33083, r33082, r33082, MPFR_RNDN);
        mpfr_mul(r33084, r33081, r33083, MPFR_RNDN);
        mpfr_sub(r33085, r33080, r33084, MPFR_RNDN);
        mpfr_const_pi(r33086, MPFR_RNDN);
        mpfr_set_d(r33087, t, MPFR_RNDN);
        mpfr_mul(r33088, r33086, r33087, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r33091, r33090, r33083, MPFR_RNDN);
        mpfr_sub(r33092, r33080, r33091, MPFR_RNDN);
        mpfr_mul(r33093, r33089, r33092, MPFR_RNDN);
        mpfr_sqrt(r33094, r33093, MPFR_RNDN);
        mpfr_mul(r33095, r33088, r33094, MPFR_RNDN);
        mpfr_sub(r33096, r33080, r33083, MPFR_RNDN);
        mpfr_mul(r33097, r33095, r33096, MPFR_RNDN);
        mpfr_div(r33098, r33085, r33097, MPFR_RNDN);
        return mpfr_get_d(r33098, MPFR_RNDN);
}

static mpfr_t r33099, r33100, r33101, r33102, r33103, r33104, r33105, r33106, r33107, r33108, r33109, r33110, r33111, r33112, r33113, r33114, r33115, r33116, r33117;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33099, "1", 10, MPFR_RNDN);
        mpfr_init(r33100);
        mpfr_init(r33101);
        mpfr_init(r33102);
        mpfr_init_set_str(r33103, "2", 10, MPFR_RNDN);
        mpfr_init(r33104);
        mpfr_init(r33105);
        mpfr_init(r33106);
        mpfr_init_set_str(r33107, "4", 10, MPFR_RNDN);
        mpfr_init(r33108);
        mpfr_init(r33109);
        mpfr_init(r33110);
        mpfr_init(r33111);
        mpfr_init(r33112);
        mpfr_init(r33113);
        mpfr_init(r33114);
        mpfr_init(r33115);
        mpfr_init(r33116);
        mpfr_init(r33117);
}

double f_fm(double v, double t) {
        ;
        mpfr_set_d(r33100, t, MPFR_RNDN);
        mpfr_div(r33101, r33099, r33100, MPFR_RNDN);
        mpfr_const_pi(r33102, MPFR_RNDN);
        ;
        mpfr_sqrt(r33104, r33103, MPFR_RNDN);
        mpfr_mul(r33105, r33102, r33104, MPFR_RNDN);
        mpfr_div(r33106, r33101, r33105, MPFR_RNDN);
        ;
        mpfr_div(r33108, r33107, r33100, MPFR_RNDN);
        mpfr_div(r33109, r33108, r33104, MPFR_RNDN);
        mpfr_set_d(r33110, v, MPFR_RNDN);
        mpfr_pow(r33111, r33110, r33107, MPFR_RNDN);
        mpfr_div(r33112, r33111, r33102, MPFR_RNDN);
        mpfr_div(r33113, r33102, r33110, MPFR_RNDN);
        mpfr_div(r33114, r33110, r33113, MPFR_RNDN);
        mpfr_add(r33115, r33112, r33114, MPFR_RNDN);
        mpfr_mul(r33116, r33109, r33115, MPFR_RNDN);
        mpfr_sub(r33117, r33106, r33116, MPFR_RNDN);
        return mpfr_get_d(r33117, MPFR_RNDN);
}

static mpfr_t r33118, r33119, r33120, r33121, r33122, r33123, r33124, r33125, r33126, r33127, r33128, r33129, r33130, r33131, r33132, r33133, r33134, r33135, r33136;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33118, "1", 10, MPFR_RNDN);
        mpfr_init(r33119);
        mpfr_init(r33120);
        mpfr_init(r33121);
        mpfr_init_set_str(r33122, "2", 10, MPFR_RNDN);
        mpfr_init(r33123);
        mpfr_init(r33124);
        mpfr_init(r33125);
        mpfr_init_set_str(r33126, "4", 10, MPFR_RNDN);
        mpfr_init(r33127);
        mpfr_init(r33128);
        mpfr_init(r33129);
        mpfr_init(r33130);
        mpfr_init(r33131);
        mpfr_init(r33132);
        mpfr_init(r33133);
        mpfr_init(r33134);
        mpfr_init(r33135);
        mpfr_init(r33136);
}

double f_dm(double v, double t) {
        ;
        mpfr_set_d(r33119, t, MPFR_RNDN);
        mpfr_div(r33120, r33118, r33119, MPFR_RNDN);
        mpfr_const_pi(r33121, MPFR_RNDN);
        ;
        mpfr_sqrt(r33123, r33122, MPFR_RNDN);
        mpfr_mul(r33124, r33121, r33123, MPFR_RNDN);
        mpfr_div(r33125, r33120, r33124, MPFR_RNDN);
        ;
        mpfr_div(r33127, r33126, r33119, MPFR_RNDN);
        mpfr_div(r33128, r33127, r33123, MPFR_RNDN);
        mpfr_set_d(r33129, v, MPFR_RNDN);
        mpfr_pow(r33130, r33129, r33126, MPFR_RNDN);
        mpfr_div(r33131, r33130, r33121, MPFR_RNDN);
        mpfr_div(r33132, r33121, r33129, MPFR_RNDN);
        mpfr_div(r33133, r33129, r33132, MPFR_RNDN);
        mpfr_add(r33134, r33131, r33133, MPFR_RNDN);
        mpfr_mul(r33135, r33128, r33134, MPFR_RNDN);
        mpfr_sub(r33136, r33125, r33135, MPFR_RNDN);
        return mpfr_get_d(r33136, MPFR_RNDN);
}

