#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 r20305 = atan2(1.0, 0.0);
        float r20306 = 4.0f;
        float r20307 = r20305 / r20306;
        float r20308 = 1.0/r20307;
        float r20309 = f;
        float r20310 = r20307 * r20309;
        float r20311 = exp(r20310);
        float r20312 = -r20310;
        float r20313 = exp(r20312);
        float r20314 = r20311 + r20313;
        float r20315 = r20311 - r20313;
        float r20316 = r20314 / r20315;
        float r20317 = log(r20316);
        float r20318 = r20308 * r20317;
        float r20319 = -r20318;
        return r20319;
}

double f_id(double f) {
        double r20320 = atan2(1.0, 0.0);
        double r20321 = 4.0;
        double r20322 = r20320 / r20321;
        double r20323 = 1.0/r20322;
        double r20324 = f;
        double r20325 = r20322 * r20324;
        double r20326 = exp(r20325);
        double r20327 = -r20325;
        double r20328 = exp(r20327);
        double r20329 = r20326 + r20328;
        double r20330 = r20326 - r20328;
        double r20331 = r20329 / r20330;
        double r20332 = log(r20331);
        double r20333 = r20323 * r20332;
        double r20334 = -r20333;
        return r20334;
}


double f_of(float f) {
        float r20335 = atan2(1.0, 0.0);
        float r20336 = 4.0f;
        float r20337 = r20335 / r20336;
        float r20338 = 1.0/r20337;
        float r20339 = -r20338;
        float r20340 = f;
        float r20341 = -r20340;
        float r20342 = r20336 / r20335;
        float r20343 = r20341 / r20342;
        float r20344 = exp(r20343);
        float r20345 = r20340 / r20342;
        float r20346 = exp(r20345);
        float r20347 = r20344 + r20346;
        float r20348 = r20340 * (r20340 * r20340);
        float r20349 = r20335 * (r20335 * r20335);
        float r20350 = r20348 * r20349;
        float r20351 = 0.005208333333333333f;
        float r20352 = r20350 * r20351;
        float r20353 = 1.6276041666666666e-05f;
        float r20354 = 5.0f;
        float r20355 = pow(r20340, r20354);
        float r20356 = pow(r20335, r20354);
        float r20357 = r20355 * r20356;
        float r20358 = r20353 * r20357;
        float r20359 = 0.5f;
        float r20360 = r20335 * r20340;
        float r20361 = r20359 * r20360;
        float r20362 = r20358 + r20361;
        float r20363 = r20352 + r20362;
        float r20364 = r20347 / r20363;
        float r20365 = log(r20364);
        float r20366 = r20339 * r20365;
        return r20366;
}

double f_od(double f) {
        double r20367 = atan2(1.0, 0.0);
        double r20368 = 4.0;
        double r20369 = r20367 / r20368;
        double r20370 = 1.0/r20369;
        double r20371 = -r20370;
        double r20372 = f;
        double r20373 = -r20372;
        double r20374 = r20368 / r20367;
        double r20375 = r20373 / r20374;
        double r20376 = exp(r20375);
        double r20377 = r20372 / r20374;
        double r20378 = exp(r20377);
        double r20379 = r20376 + r20378;
        double r20380 = r20372 * (r20372 * r20372);
        double r20381 = r20367 * (r20367 * r20367);
        double r20382 = r20380 * r20381;
        double r20383 = 0.005208333333333333;
        double r20384 = r20382 * r20383;
        double r20385 = 1.6276041666666666e-05;
        double r20386 = 5.0;
        double r20387 = pow(r20372, r20386);
        double r20388 = pow(r20367, r20386);
        double r20389 = r20387 * r20388;
        double r20390 = r20385 * r20389;
        double r20391 = 0.5;
        double r20392 = r20367 * r20372;
        double r20393 = r20391 * r20392;
        double r20394 = r20390 + r20393;
        double r20395 = r20384 + r20394;
        double r20396 = r20379 / r20395;
        double r20397 = log(r20396);
        double r20398 = r20371 * r20397;
        return r20398;
}

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 r20399, r20400, r20401, r20402, r20403, r20404, r20405, r20406, r20407, r20408, r20409, r20410, r20411, r20412, r20413;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r20399);
        mpfr_init_set_str(r20400, "4", 10, MPFR_RNDN);
        mpfr_init(r20401);
        mpfr_init(r20402);
        mpfr_init(r20403);
        mpfr_init(r20404);
        mpfr_init(r20405);
        mpfr_init(r20406);
        mpfr_init(r20407);
        mpfr_init(r20408);
        mpfr_init(r20409);
        mpfr_init(r20410);
        mpfr_init(r20411);
        mpfr_init(r20412);
        mpfr_init(r20413);
}

double f_im(double f) {
        mpfr_const_pi(r20399, MPFR_RNDN);
        ;
        mpfr_div(r20401, r20399, r20400, MPFR_RNDN);
        mpfr_ui_div(r20402, 1, r20401, MPFR_RNDN);
        mpfr_set_d(r20403, f, MPFR_RNDN);
        mpfr_mul(r20404, r20401, r20403, MPFR_RNDN);
        mpfr_exp(r20405, r20404, MPFR_RNDN);
        mpfr_neg(r20406, r20404, MPFR_RNDN);
        mpfr_exp(r20407, r20406, MPFR_RNDN);
        mpfr_add(r20408, r20405, r20407, MPFR_RNDN);
        mpfr_sub(r20409, r20405, r20407, MPFR_RNDN);
        mpfr_div(r20410, r20408, r20409, MPFR_RNDN);
        mpfr_log(r20411, r20410, MPFR_RNDN);
        mpfr_mul(r20412, r20402, r20411, MPFR_RNDN);
        mpfr_neg(r20413, r20412, MPFR_RNDN);
        return mpfr_get_d(r20413, MPFR_RNDN);
}

static mpfr_t r20414, r20415, r20416, r20417, r20418, r20419, r20420, r20421, r20422, r20423, r20424, r20425, r20426, r20427, r20428, r20429, r20430, r20431, r20432, r20433, r20434, r20435, r20436, r20437, r20438, r20439, r20440, r20441, r20442, r20443, r20444, r20445;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r20414);
        mpfr_init_set_str(r20415, "4", 10, MPFR_RNDN);
        mpfr_init(r20416);
        mpfr_init(r20417);
        mpfr_init(r20418);
        mpfr_init(r20419);
        mpfr_init(r20420);
        mpfr_init(r20421);
        mpfr_init(r20422);
        mpfr_init(r20423);
        mpfr_init(r20424);
        mpfr_init(r20425);
        mpfr_init(r20426);
        mpfr_init(r20427);
        mpfr_init(r20428);
        mpfr_init(r20429);
        mpfr_init_set_str(r20430, "1/192", 10, MPFR_RNDN);
        mpfr_init(r20431);
        mpfr_init_set_str(r20432, "1/61440", 10, MPFR_RNDN);
        mpfr_init_set_str(r20433, "5", 10, MPFR_RNDN);
        mpfr_init(r20434);
        mpfr_init(r20435);
        mpfr_init(r20436);
        mpfr_init(r20437);
        mpfr_init_set_str(r20438, "1/2", 10, MPFR_RNDN);
        mpfr_init(r20439);
        mpfr_init(r20440);
        mpfr_init(r20441);
        mpfr_init(r20442);
        mpfr_init(r20443);
        mpfr_init(r20444);
        mpfr_init(r20445);
}

double f_fm(double f) {
        mpfr_const_pi(r20414, MPFR_RNDN);
        ;
        mpfr_div(r20416, r20414, r20415, MPFR_RNDN);
        mpfr_ui_div(r20417, 1, r20416, MPFR_RNDN);
        mpfr_neg(r20418, r20417, MPFR_RNDN);
        mpfr_set_d(r20419, f, MPFR_RNDN);
        mpfr_neg(r20420, r20419, MPFR_RNDN);
        mpfr_div(r20421, r20415, r20414, MPFR_RNDN);
        mpfr_div(r20422, r20420, r20421, MPFR_RNDN);
        mpfr_exp(r20423, r20422, MPFR_RNDN);
        mpfr_div(r20424, r20419, r20421, MPFR_RNDN);
        mpfr_exp(r20425, r20424, MPFR_RNDN);
        mpfr_add(r20426, r20423, r20425, MPFR_RNDN);
        mpfr_mul(r20427, r20419, r20419, MPFR_RNDN); mpfr_mul(r20427, r20427, r20419, MPFR_RNDN);
        mpfr_mul(r20428, r20414, r20414, MPFR_RNDN); mpfr_mul(r20428, r20428, r20414, MPFR_RNDN);
        mpfr_mul(r20429, r20427, r20428, MPFR_RNDN);
        ;
        mpfr_mul(r20431, r20429, r20430, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r20434, r20419, r20433, MPFR_RNDN);
        mpfr_pow(r20435, r20414, r20433, MPFR_RNDN);
        mpfr_mul(r20436, r20434, r20435, MPFR_RNDN);
        mpfr_mul(r20437, r20432, r20436, MPFR_RNDN);
        ;
        mpfr_mul(r20439, r20414, r20419, MPFR_RNDN);
        mpfr_mul(r20440, r20438, r20439, MPFR_RNDN);
        mpfr_add(r20441, r20437, r20440, MPFR_RNDN);
        mpfr_add(r20442, r20431, r20441, MPFR_RNDN);
        mpfr_div(r20443, r20426, r20442, MPFR_RNDN);
        mpfr_log(r20444, r20443, MPFR_RNDN);
        mpfr_mul(r20445, r20418, r20444, MPFR_RNDN);
        return mpfr_get_d(r20445, MPFR_RNDN);
}

static mpfr_t r20446, r20447, r20448, r20449, r20450, r20451, r20452, r20453, r20454, r20455, r20456, r20457, r20458, r20459, r20460, r20461, r20462, r20463, r20464, r20465, r20466, r20467, r20468, r20469, r20470, r20471, r20472, r20473, r20474, r20475, r20476, r20477;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r20446);
        mpfr_init_set_str(r20447, "4", 10, MPFR_RNDN);
        mpfr_init(r20448);
        mpfr_init(r20449);
        mpfr_init(r20450);
        mpfr_init(r20451);
        mpfr_init(r20452);
        mpfr_init(r20453);
        mpfr_init(r20454);
        mpfr_init(r20455);
        mpfr_init(r20456);
        mpfr_init(r20457);
        mpfr_init(r20458);
        mpfr_init(r20459);
        mpfr_init(r20460);
        mpfr_init(r20461);
        mpfr_init_set_str(r20462, "1/192", 10, MPFR_RNDN);
        mpfr_init(r20463);
        mpfr_init_set_str(r20464, "1/61440", 10, MPFR_RNDN);
        mpfr_init_set_str(r20465, "5", 10, MPFR_RNDN);
        mpfr_init(r20466);
        mpfr_init(r20467);
        mpfr_init(r20468);
        mpfr_init(r20469);
        mpfr_init_set_str(r20470, "1/2", 10, MPFR_RNDN);
        mpfr_init(r20471);
        mpfr_init(r20472);
        mpfr_init(r20473);
        mpfr_init(r20474);
        mpfr_init(r20475);
        mpfr_init(r20476);
        mpfr_init(r20477);
}

double f_dm(double f) {
        mpfr_const_pi(r20446, MPFR_RNDN);
        ;
        mpfr_div(r20448, r20446, r20447, MPFR_RNDN);
        mpfr_ui_div(r20449, 1, r20448, MPFR_RNDN);
        mpfr_neg(r20450, r20449, MPFR_RNDN);
        mpfr_set_d(r20451, f, MPFR_RNDN);
        mpfr_neg(r20452, r20451, MPFR_RNDN);
        mpfr_div(r20453, r20447, r20446, MPFR_RNDN);
        mpfr_div(r20454, r20452, r20453, MPFR_RNDN);
        mpfr_exp(r20455, r20454, MPFR_RNDN);
        mpfr_div(r20456, r20451, r20453, MPFR_RNDN);
        mpfr_exp(r20457, r20456, MPFR_RNDN);
        mpfr_add(r20458, r20455, r20457, MPFR_RNDN);
        mpfr_mul(r20459, r20451, r20451, MPFR_RNDN); mpfr_mul(r20459, r20459, r20451, MPFR_RNDN);
        mpfr_mul(r20460, r20446, r20446, MPFR_RNDN); mpfr_mul(r20460, r20460, r20446, MPFR_RNDN);
        mpfr_mul(r20461, r20459, r20460, MPFR_RNDN);
        ;
        mpfr_mul(r20463, r20461, r20462, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r20466, r20451, r20465, MPFR_RNDN);
        mpfr_pow(r20467, r20446, r20465, MPFR_RNDN);
        mpfr_mul(r20468, r20466, r20467, MPFR_RNDN);
        mpfr_mul(r20469, r20464, r20468, MPFR_RNDN);
        ;
        mpfr_mul(r20471, r20446, r20451, MPFR_RNDN);
        mpfr_mul(r20472, r20470, r20471, MPFR_RNDN);
        mpfr_add(r20473, r20469, r20472, MPFR_RNDN);
        mpfr_add(r20474, r20463, r20473, MPFR_RNDN);
        mpfr_div(r20475, r20458, r20474, MPFR_RNDN);
        mpfr_log(r20476, r20475, MPFR_RNDN);
        mpfr_mul(r20477, r20450, r20476, MPFR_RNDN);
        return mpfr_get_d(r20477, MPFR_RNDN);
}

