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

char *name = "Crypto.Random.Test:calculate from crypto-random-0.0.9";

double f_if(float x, float y, float z) {
        float r57426 = x;
        float r57427 = y;
        float r57428 = r57427 * r57427;
        float r57429 = z;
        float r57430 = r57428 / r57429;
        float r57431 = r57426 + r57430;
        return r57431;
}

double f_id(double x, double y, double z) {
        double r57432 = x;
        double r57433 = y;
        double r57434 = r57433 * r57433;
        double r57435 = z;
        double r57436 = r57434 / r57435;
        double r57437 = r57432 + r57436;
        return r57437;
}


double f_of(float x, float y, float z) {
        float r57438 = x;
        float r57439 = y;
        float r57440 = z;
        float r57441 = r57439 / r57440;
        float r57442 = r57439 * r57441;
        float r57443 = r57438 + r57442;
        return r57443;
}

double f_od(double x, double y, double z) {
        double r57444 = x;
        double r57445 = y;
        double r57446 = z;
        double r57447 = r57445 / r57446;
        double r57448 = r57445 * r57447;
        double r57449 = r57444 + r57448;
        return r57449;
}

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 r57450, r57451, r57452, r57453, r57454, r57455;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r57450);
        mpfr_init(r57451);
        mpfr_init(r57452);
        mpfr_init(r57453);
        mpfr_init(r57454);
        mpfr_init(r57455);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r57450, x, MPFR_RNDN);
        mpfr_set_d(r57451, y, MPFR_RNDN);
        mpfr_mul(r57452, r57451, r57451, MPFR_RNDN);
        mpfr_set_d(r57453, z, MPFR_RNDN);
        mpfr_div(r57454, r57452, r57453, MPFR_RNDN);
        mpfr_add(r57455, r57450, r57454, MPFR_RNDN);
        return mpfr_get_d(r57455, MPFR_RNDN);
}

static mpfr_t r57456, r57457, r57458, r57459, r57460, r57461;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r57456);
        mpfr_init(r57457);
        mpfr_init(r57458);
        mpfr_init(r57459);
        mpfr_init(r57460);
        mpfr_init(r57461);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r57456, x, MPFR_RNDN);
        mpfr_set_d(r57457, y, MPFR_RNDN);
        mpfr_set_d(r57458, z, MPFR_RNDN);
        mpfr_div(r57459, r57457, r57458, MPFR_RNDN);
        mpfr_mul(r57460, r57457, r57459, MPFR_RNDN);
        mpfr_add(r57461, r57456, r57460, MPFR_RNDN);
        return mpfr_get_d(r57461, MPFR_RNDN);
}

static mpfr_t r57462, r57463, r57464, r57465, r57466, r57467;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r57462);
        mpfr_init(r57463);
        mpfr_init(r57464);
        mpfr_init(r57465);
        mpfr_init(r57466);
        mpfr_init(r57467);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r57462, x, MPFR_RNDN);
        mpfr_set_d(r57463, y, MPFR_RNDN);
        mpfr_set_d(r57464, z, MPFR_RNDN);
        mpfr_div(r57465, r57463, r57464, MPFR_RNDN);
        mpfr_mul(r57466, r57463, r57465, MPFR_RNDN);
        mpfr_add(r57467, r57462, r57466, MPFR_RNDN);
        return mpfr_get_d(r57467, MPFR_RNDN);
}

