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

char *name = "VandenBroeck and Keller, Equation (20)";

double f_if(float f) {
        float r8262 = 1;
        float r8263 = atan2(1.0, 0.0);
        float r8264 = 4;
        float r8265 = r8263 / r8264;
        float r8266 = r8262 / r8265;
        float r8267 = f;
        float r8268 = r8265 * r8267;
        float r8269 = exp(r8268);
        float r8270 = -r8268;
        float r8271 = exp(r8270);
        float r8272 = r8269 + r8271;
        float r8273 = r8269 - r8271;
        float r8274 = r8272 / r8273;
        float r8275 = log(r8274);
        float r8276 = r8266 * r8275;
        float r8277 = -r8276;
        return r8277;
}

double f_id(double f) {
        double r8278 = 1;
        double r8279 = atan2(1.0, 0.0);
        double r8280 = 4;
        double r8281 = r8279 / r8280;
        double r8282 = r8278 / r8281;
        double r8283 = f;
        double r8284 = r8281 * r8283;
        double r8285 = exp(r8284);
        double r8286 = -r8284;
        double r8287 = exp(r8286);
        double r8288 = r8285 + r8287;
        double r8289 = r8285 - r8287;
        double r8290 = r8288 / r8289;
        double r8291 = log(r8290);
        double r8292 = r8282 * r8291;
        double r8293 = -r8292;
        return r8293;
}


double f_of(float f) {
        float r8294 = atan2(1.0, 0.0);
        float r8295 = 4;
        float r8296 = r8294 / r8295;
        float r8297 = f;
        float r8298 = -r8297;
        float r8299 = r8296 * r8298;
        float r8300 = exp(r8299);
        float r8301 = r8297 * r8296;
        float r8302 = exp(r8301);
        float r8303 = r8300 + r8302;
        float r8304 = 1/192;
        float r8305 = r8297 * r8297;
        float r8306 = r8304 * r8305;
        float r8307 = r8294 * r8294;
        float r8308 = r8297 * r8307;
        float r8309 = 1/2;
        float r8310 = r8297 * r8309;
        float r8311 = fma(r8306, r8308, r8310);
        float r8312 = 5;
        float r8313 = pow(r8294, r8312);
        float r8314 = 1/61440;
        float r8315 = pow(r8297, r8312);
        float r8316 = r8314 * r8315;
        float r8317 = r8313 * r8316;
        float r8318 = fma(r8294, r8311, r8317);
        float r8319 = r8303 / r8318;
        float r8320 = log(r8319);
        float r8321 = -r8295;
        float r8322 = r8320 * r8321;
        float r8323 = r8322 / r8294;
        return r8323;
}

double f_od(double f) {
        double r8324 = atan2(1.0, 0.0);
        double r8325 = 4;
        double r8326 = r8324 / r8325;
        double r8327 = f;
        double r8328 = -r8327;
        double r8329 = r8326 * r8328;
        double r8330 = exp(r8329);
        double r8331 = r8327 * r8326;
        double r8332 = exp(r8331);
        double r8333 = r8330 + r8332;
        double r8334 = 1/192;
        double r8335 = r8327 * r8327;
        double r8336 = r8334 * r8335;
        double r8337 = r8324 * r8324;
        double r8338 = r8327 * r8337;
        double r8339 = 1/2;
        double r8340 = r8327 * r8339;
        double r8341 = fma(r8336, r8338, r8340);
        double r8342 = 5;
        double r8343 = pow(r8324, r8342);
        double r8344 = 1/61440;
        double r8345 = pow(r8327, r8342);
        double r8346 = r8344 * r8345;
        double r8347 = r8343 * r8346;
        double r8348 = fma(r8324, r8341, r8347);
        double r8349 = r8333 / r8348;
        double r8350 = log(r8349);
        double r8351 = -r8325;
        double r8352 = r8350 * r8351;
        double r8353 = r8352 / r8324;
        return r8353;
}

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 r8354, r8355, r8356, r8357, r8358, r8359, r8360, r8361, r8362, r8363, r8364, r8365, r8366, r8367, r8368, r8369;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8354, "1", 10, MPFR_RNDN);
        mpfr_init(r8355);
        mpfr_init_set_str(r8356, "4", 10, MPFR_RNDN);
        mpfr_init(r8357);
        mpfr_init(r8358);
        mpfr_init(r8359);
        mpfr_init(r8360);
        mpfr_init(r8361);
        mpfr_init(r8362);
        mpfr_init(r8363);
        mpfr_init(r8364);
        mpfr_init(r8365);
        mpfr_init(r8366);
        mpfr_init(r8367);
        mpfr_init(r8368);
        mpfr_init(r8369);
}

double f_im(double f) {
        ;
        mpfr_const_pi(r8355, MPFR_RNDN);
        ;
        mpfr_div(r8357, r8355, r8356, MPFR_RNDN);
        mpfr_div(r8358, r8354, r8357, MPFR_RNDN);
        mpfr_set_d(r8359, f, MPFR_RNDN);
        mpfr_mul(r8360, r8357, r8359, MPFR_RNDN);
        mpfr_exp(r8361, r8360, MPFR_RNDN);
        mpfr_neg(r8362, r8360, MPFR_RNDN);
        mpfr_exp(r8363, r8362, MPFR_RNDN);
        mpfr_add(r8364, r8361, r8363, MPFR_RNDN);
        mpfr_sub(r8365, r8361, r8363, MPFR_RNDN);
        mpfr_div(r8366, r8364, r8365, MPFR_RNDN);
        mpfr_log(r8367, r8366, MPFR_RNDN);
        mpfr_mul(r8368, r8358, r8367, MPFR_RNDN);
        mpfr_neg(r8369, r8368, MPFR_RNDN);
        return mpfr_get_d(r8369, MPFR_RNDN);
}

static mpfr_t r8370, r8371, r8372, r8373, r8374, r8375, r8376, r8377, r8378, r8379, r8380, r8381, r8382, r8383, r8384, r8385, r8386, r8387, r8388, r8389, r8390, r8391, r8392, r8393, r8394, r8395, r8396, r8397, r8398, r8399;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8370);
        mpfr_init_set_str(r8371, "4", 10, MPFR_RNDN);
        mpfr_init(r8372);
        mpfr_init(r8373);
        mpfr_init(r8374);
        mpfr_init(r8375);
        mpfr_init(r8376);
        mpfr_init(r8377);
        mpfr_init(r8378);
        mpfr_init(r8379);
        mpfr_init_set_str(r8380, "1/192", 10, MPFR_RNDN);
        mpfr_init(r8381);
        mpfr_init(r8382);
        mpfr_init(r8383);
        mpfr_init(r8384);
        mpfr_init_set_str(r8385, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8386);
        mpfr_init(r8387);
        mpfr_init_set_str(r8388, "5", 10, MPFR_RNDN);
        mpfr_init(r8389);
        mpfr_init_set_str(r8390, "1/61440", 10, MPFR_RNDN);
        mpfr_init(r8391);
        mpfr_init(r8392);
        mpfr_init(r8393);
        mpfr_init(r8394);
        mpfr_init(r8395);
        mpfr_init(r8396);
        mpfr_init(r8397);
        mpfr_init(r8398);
        mpfr_init(r8399);
}

double f_fm(double f) {
        mpfr_const_pi(r8370, MPFR_RNDN);
        ;
        mpfr_div(r8372, r8370, r8371, MPFR_RNDN);
        mpfr_set_d(r8373, f, MPFR_RNDN);
        mpfr_neg(r8374, r8373, MPFR_RNDN);
        mpfr_mul(r8375, r8372, r8374, MPFR_RNDN);
        mpfr_exp(r8376, r8375, MPFR_RNDN);
        mpfr_mul(r8377, r8373, r8372, MPFR_RNDN);
        mpfr_exp(r8378, r8377, MPFR_RNDN);
        mpfr_add(r8379, r8376, r8378, MPFR_RNDN);
        ;
        mpfr_mul(r8381, r8373, r8373, MPFR_RNDN);
        mpfr_mul(r8382, r8380, r8381, MPFR_RNDN);
        mpfr_mul(r8383, r8370, r8370, MPFR_RNDN);
        mpfr_mul(r8384, r8373, r8383, MPFR_RNDN);
        ;
        mpfr_mul(r8386, r8373, r8385, MPFR_RNDN);
        mpfr_fma(r8387, r8382, r8384, r8386, MPFR_RNDN);
        ;
        mpfr_pow(r8389, r8370, r8388, MPFR_RNDN);
        ;
        mpfr_pow(r8391, r8373, r8388, MPFR_RNDN);
        mpfr_mul(r8392, r8390, r8391, MPFR_RNDN);
        mpfr_mul(r8393, r8389, r8392, MPFR_RNDN);
        mpfr_fma(r8394, r8370, r8387, r8393, MPFR_RNDN);
        mpfr_div(r8395, r8379, r8394, MPFR_RNDN);
        mpfr_log(r8396, r8395, MPFR_RNDN);
        mpfr_neg(r8397, r8371, MPFR_RNDN);
        mpfr_mul(r8398, r8396, r8397, MPFR_RNDN);
        mpfr_div(r8399, r8398, r8370, MPFR_RNDN);
        return mpfr_get_d(r8399, MPFR_RNDN);
}

static mpfr_t r8400, r8401, r8402, r8403, r8404, r8405, r8406, r8407, r8408, r8409, r8410, r8411, r8412, r8413, r8414, r8415, r8416, r8417, r8418, r8419, r8420, r8421, r8422, r8423, r8424, r8425, r8426, r8427, r8428, r8429;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8400);
        mpfr_init_set_str(r8401, "4", 10, MPFR_RNDN);
        mpfr_init(r8402);
        mpfr_init(r8403);
        mpfr_init(r8404);
        mpfr_init(r8405);
        mpfr_init(r8406);
        mpfr_init(r8407);
        mpfr_init(r8408);
        mpfr_init(r8409);
        mpfr_init_set_str(r8410, "1/192", 10, MPFR_RNDN);
        mpfr_init(r8411);
        mpfr_init(r8412);
        mpfr_init(r8413);
        mpfr_init(r8414);
        mpfr_init_set_str(r8415, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8416);
        mpfr_init(r8417);
        mpfr_init_set_str(r8418, "5", 10, MPFR_RNDN);
        mpfr_init(r8419);
        mpfr_init_set_str(r8420, "1/61440", 10, MPFR_RNDN);
        mpfr_init(r8421);
        mpfr_init(r8422);
        mpfr_init(r8423);
        mpfr_init(r8424);
        mpfr_init(r8425);
        mpfr_init(r8426);
        mpfr_init(r8427);
        mpfr_init(r8428);
        mpfr_init(r8429);
}

double f_dm(double f) {
        mpfr_const_pi(r8400, MPFR_RNDN);
        ;
        mpfr_div(r8402, r8400, r8401, MPFR_RNDN);
        mpfr_set_d(r8403, f, MPFR_RNDN);
        mpfr_neg(r8404, r8403, MPFR_RNDN);
        mpfr_mul(r8405, r8402, r8404, MPFR_RNDN);
        mpfr_exp(r8406, r8405, MPFR_RNDN);
        mpfr_mul(r8407, r8403, r8402, MPFR_RNDN);
        mpfr_exp(r8408, r8407, MPFR_RNDN);
        mpfr_add(r8409, r8406, r8408, MPFR_RNDN);
        ;
        mpfr_mul(r8411, r8403, r8403, MPFR_RNDN);
        mpfr_mul(r8412, r8410, r8411, MPFR_RNDN);
        mpfr_mul(r8413, r8400, r8400, MPFR_RNDN);
        mpfr_mul(r8414, r8403, r8413, MPFR_RNDN);
        ;
        mpfr_mul(r8416, r8403, r8415, MPFR_RNDN);
        mpfr_fma(r8417, r8412, r8414, r8416, MPFR_RNDN);
        ;
        mpfr_pow(r8419, r8400, r8418, MPFR_RNDN);
        ;
        mpfr_pow(r8421, r8403, r8418, MPFR_RNDN);
        mpfr_mul(r8422, r8420, r8421, MPFR_RNDN);
        mpfr_mul(r8423, r8419, r8422, MPFR_RNDN);
        mpfr_fma(r8424, r8400, r8417, r8423, MPFR_RNDN);
        mpfr_div(r8425, r8409, r8424, MPFR_RNDN);
        mpfr_log(r8426, r8425, MPFR_RNDN);
        mpfr_neg(r8427, r8401, MPFR_RNDN);
        mpfr_mul(r8428, r8426, r8427, MPFR_RNDN);
        mpfr_div(r8429, r8428, r8400, MPFR_RNDN);
        return mpfr_get_d(r8429, MPFR_RNDN);
}

