#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 r57928 = x;
        float r57929 = y;
        float r57930 = r57929 * r57929;
        float r57931 = z;
        float r57932 = r57930 / r57931;
        float r57933 = r57928 + r57932;
        return r57933;
}

double f_id(double x, double y, double z) {
        double r57934 = x;
        double r57935 = y;
        double r57936 = r57935 * r57935;
        double r57937 = z;
        double r57938 = r57936 / r57937;
        double r57939 = r57934 + r57938;
        return r57939;
}


double f_of(float x, float y, float z) {
        float r57940 = x;
        float r57941 = y;
        float r57942 = z;
        float r57943 = r57942 / r57941;
        float r57944 = r57941 / r57943;
        float r57945 = r57940 + r57944;
        return r57945;
}

double f_od(double x, double y, double z) {
        double r57946 = x;
        double r57947 = y;
        double r57948 = z;
        double r57949 = r57948 / r57947;
        double r57950 = r57947 / r57949;
        double r57951 = r57946 + r57950;
        return r57951;
}

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 r57952, r57953, r57954, r57955, r57956, r57957;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57952);
        mpfr_init(r57953);
        mpfr_init(r57954);
        mpfr_init(r57955);
        mpfr_init(r57956);
        mpfr_init(r57957);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r57952, x, MPFR_RNDN);
        mpfr_set_d(r57953, y, MPFR_RNDN);
        mpfr_mul(r57954, r57953, r57953, MPFR_RNDN);
        mpfr_set_d(r57955, z, MPFR_RNDN);
        mpfr_div(r57956, r57954, r57955, MPFR_RNDN);
        mpfr_add(r57957, r57952, r57956, MPFR_RNDN);
        return mpfr_get_d(r57957, MPFR_RNDN);
}

static mpfr_t r57958, r57959, r57960, r57961, r57962, r57963;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57958);
        mpfr_init(r57959);
        mpfr_init(r57960);
        mpfr_init(r57961);
        mpfr_init(r57962);
        mpfr_init(r57963);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r57958, x, MPFR_RNDN);
        mpfr_set_d(r57959, y, MPFR_RNDN);
        mpfr_set_d(r57960, z, MPFR_RNDN);
        mpfr_div(r57961, r57960, r57959, MPFR_RNDN);
        mpfr_div(r57962, r57959, r57961, MPFR_RNDN);
        mpfr_add(r57963, r57958, r57962, MPFR_RNDN);
        return mpfr_get_d(r57963, MPFR_RNDN);
}

static mpfr_t r57964, r57965, r57966, r57967, r57968, r57969;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57964);
        mpfr_init(r57965);
        mpfr_init(r57966);
        mpfr_init(r57967);
        mpfr_init(r57968);
        mpfr_init(r57969);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r57964, x, MPFR_RNDN);
        mpfr_set_d(r57965, y, MPFR_RNDN);
        mpfr_set_d(r57966, z, MPFR_RNDN);
        mpfr_div(r57967, r57966, r57965, MPFR_RNDN);
        mpfr_div(r57968, r57965, r57967, MPFR_RNDN);
        mpfr_add(r57969, r57964, r57968, MPFR_RNDN);
        return mpfr_get_d(r57969, MPFR_RNDN);
}

