#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 r33020 = 1;
        float r33021 = 5;
        float r33022 = v;
        float r33023 = r33022 * r33022;
        float r33024 = r33021 * r33023;
        float r33025 = r33020 - r33024;
        float r33026 = atan2(1.0, 0.0);
        float r33027 = t;
        float r33028 = r33026 * r33027;
        float r33029 = 2;
        float r33030 = 3;
        float r33031 = r33030 * r33023;
        float r33032 = r33020 - r33031;
        float r33033 = r33029 * r33032;
        float r33034 = sqrt(r33033);
        float r33035 = r33028 * r33034;
        float r33036 = r33020 - r33023;
        float r33037 = r33035 * r33036;
        float r33038 = r33025 / r33037;
        return r33038;
}

double f_id(double v, double t) {
        double r33039 = 1;
        double r33040 = 5;
        double r33041 = v;
        double r33042 = r33041 * r33041;
        double r33043 = r33040 * r33042;
        double r33044 = r33039 - r33043;
        double r33045 = atan2(1.0, 0.0);
        double r33046 = t;
        double r33047 = r33045 * r33046;
        double r33048 = 2;
        double r33049 = 3;
        double r33050 = r33049 * r33042;
        double r33051 = r33039 - r33050;
        double r33052 = r33048 * r33051;
        double r33053 = sqrt(r33052);
        double r33054 = r33047 * r33053;
        double r33055 = r33039 - r33042;
        double r33056 = r33054 * r33055;
        double r33057 = r33044 / r33056;
        return r33057;
}


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

double f_od(double v, double t) {
        double r33077 = 1;
        double r33078 = t;
        double r33079 = r33077 / r33078;
        double r33080 = atan2(1.0, 0.0);
        double r33081 = 2;
        double r33082 = sqrt(r33081);
        double r33083 = r33080 * r33082;
        double r33084 = r33079 / r33083;
        double r33085 = 4;
        double r33086 = r33085 / r33078;
        double r33087 = r33086 / r33082;
        double r33088 = v;
        double r33089 = pow(r33088, r33085);
        double r33090 = r33089 / r33080;
        double r33091 = r33080 / r33088;
        double r33092 = r33088 / r33091;
        double r33093 = r33090 + r33092;
        double r33094 = r33087 * r33093;
        double r33095 = r33084 - r33094;
        return r33095;
}

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 r33096, r33097, r33098, r33099, r33100, r33101, r33102, r33103, r33104, r33105, r33106, r33107, r33108, r33109, r33110, r33111, r33112, r33113, r33114;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33096, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33097, "5", 10, MPFR_RNDN);
        mpfr_init(r33098);
        mpfr_init(r33099);
        mpfr_init(r33100);
        mpfr_init(r33101);
        mpfr_init(r33102);
        mpfr_init(r33103);
        mpfr_init(r33104);
        mpfr_init_set_str(r33105, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r33106, "3", 10, MPFR_RNDN);
        mpfr_init(r33107);
        mpfr_init(r33108);
        mpfr_init(r33109);
        mpfr_init(r33110);
        mpfr_init(r33111);
        mpfr_init(r33112);
        mpfr_init(r33113);
        mpfr_init(r33114);
}

double f_im(double v, double t) {
        ;
        ;
        mpfr_set_d(r33098, v, MPFR_RNDN);
        mpfr_mul(r33099, r33098, r33098, MPFR_RNDN);
        mpfr_mul(r33100, r33097, r33099, MPFR_RNDN);
        mpfr_sub(r33101, r33096, r33100, MPFR_RNDN);
        mpfr_const_pi(r33102, MPFR_RNDN);
        mpfr_set_d(r33103, t, MPFR_RNDN);
        mpfr_mul(r33104, r33102, r33103, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r33107, r33106, r33099, MPFR_RNDN);
        mpfr_sub(r33108, r33096, r33107, MPFR_RNDN);
        mpfr_mul(r33109, r33105, r33108, MPFR_RNDN);
        mpfr_sqrt(r33110, r33109, MPFR_RNDN);
        mpfr_mul(r33111, r33104, r33110, MPFR_RNDN);
        mpfr_sub(r33112, r33096, r33099, MPFR_RNDN);
        mpfr_mul(r33113, r33111, r33112, MPFR_RNDN);
        mpfr_div(r33114, r33101, r33113, MPFR_RNDN);
        return mpfr_get_d(r33114, MPFR_RNDN);
}

static mpfr_t r33115, r33116, r33117, r33118, r33119, r33120, r33121, r33122, r33123, r33124, r33125, r33126, r33127, r33128, r33129, r33130, r33131, r33132, r33133;

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

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

static mpfr_t r33134, r33135, r33136, r33137, r33138, r33139, r33140, r33141, r33142, r33143, r33144, r33145, r33146, r33147, r33148, r33149, r33150, r33151, r33152;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33134, "1", 10, MPFR_RNDN);
        mpfr_init(r33135);
        mpfr_init(r33136);
        mpfr_init(r33137);
        mpfr_init_set_str(r33138, "2", 10, MPFR_RNDN);
        mpfr_init(r33139);
        mpfr_init(r33140);
        mpfr_init(r33141);
        mpfr_init_set_str(r33142, "4", 10, MPFR_RNDN);
        mpfr_init(r33143);
        mpfr_init(r33144);
        mpfr_init(r33145);
        mpfr_init(r33146);
        mpfr_init(r33147);
        mpfr_init(r33148);
        mpfr_init(r33149);
        mpfr_init(r33150);
        mpfr_init(r33151);
        mpfr_init(r33152);
}

double f_dm(double v, double t) {
        ;
        mpfr_set_d(r33135, t, MPFR_RNDN);
        mpfr_div(r33136, r33134, r33135, MPFR_RNDN);
        mpfr_const_pi(r33137, MPFR_RNDN);
        ;
        mpfr_sqrt(r33139, r33138, MPFR_RNDN);
        mpfr_mul(r33140, r33137, r33139, MPFR_RNDN);
        mpfr_div(r33141, r33136, r33140, MPFR_RNDN);
        ;
        mpfr_div(r33143, r33142, r33135, MPFR_RNDN);
        mpfr_div(r33144, r33143, r33139, MPFR_RNDN);
        mpfr_set_d(r33145, v, MPFR_RNDN);
        mpfr_pow(r33146, r33145, r33142, MPFR_RNDN);
        mpfr_div(r33147, r33146, r33137, MPFR_RNDN);
        mpfr_div(r33148, r33137, r33145, MPFR_RNDN);
        mpfr_div(r33149, r33145, r33148, MPFR_RNDN);
        mpfr_add(r33150, r33147, r33149, MPFR_RNDN);
        mpfr_mul(r33151, r33144, r33150, MPFR_RNDN);
        mpfr_sub(r33152, r33141, r33151, MPFR_RNDN);
        return mpfr_get_d(r33152, MPFR_RNDN);
}

