#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 r56563 = x;
        float r56564 = y;
        float r56565 = r56564 * r56564;
        float r56566 = z;
        float r56567 = r56565 / r56566;
        float r56568 = r56563 + r56567;
        return r56568;
}

double f_id(double x, double y, double z) {
        double r56569 = x;
        double r56570 = y;
        double r56571 = r56570 * r56570;
        double r56572 = z;
        double r56573 = r56571 / r56572;
        double r56574 = r56569 + r56573;
        return r56574;
}


double f_of(float x, float y, float z) {
        float r56575 = x;
        float r56576 = y;
        float r56577 = z;
        float r56578 = r56577 / r56576;
        float r56579 = r56576 / r56578;
        float r56580 = r56575 + r56579;
        return r56580;
}

double f_od(double x, double y, double z) {
        double r56581 = x;
        double r56582 = y;
        double r56583 = z;
        double r56584 = r56583 / r56582;
        double r56585 = r56582 / r56584;
        double r56586 = r56581 + r56585;
        return r56586;
}

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 r56587, r56588, r56589, r56590, r56591, r56592;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56587);
        mpfr_init(r56588);
        mpfr_init(r56589);
        mpfr_init(r56590);
        mpfr_init(r56591);
        mpfr_init(r56592);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r56587, x, MPFR_RNDN);
        mpfr_set_d(r56588, y, MPFR_RNDN);
        mpfr_mul(r56589, r56588, r56588, MPFR_RNDN);
        mpfr_set_d(r56590, z, MPFR_RNDN);
        mpfr_div(r56591, r56589, r56590, MPFR_RNDN);
        mpfr_add(r56592, r56587, r56591, MPFR_RNDN);
        return mpfr_get_d(r56592, MPFR_RNDN);
}

static mpfr_t r56593, r56594, r56595, r56596, r56597, r56598;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56593);
        mpfr_init(r56594);
        mpfr_init(r56595);
        mpfr_init(r56596);
        mpfr_init(r56597);
        mpfr_init(r56598);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r56593, x, MPFR_RNDN);
        mpfr_set_d(r56594, y, MPFR_RNDN);
        mpfr_set_d(r56595, z, MPFR_RNDN);
        mpfr_div(r56596, r56595, r56594, MPFR_RNDN);
        mpfr_div(r56597, r56594, r56596, MPFR_RNDN);
        mpfr_add(r56598, r56593, r56597, MPFR_RNDN);
        return mpfr_get_d(r56598, MPFR_RNDN);
}

static mpfr_t r56599, r56600, r56601, r56602, r56603, r56604;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56599);
        mpfr_init(r56600);
        mpfr_init(r56601);
        mpfr_init(r56602);
        mpfr_init(r56603);
        mpfr_init(r56604);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r56599, x, MPFR_RNDN);
        mpfr_set_d(r56600, y, MPFR_RNDN);
        mpfr_set_d(r56601, z, MPFR_RNDN);
        mpfr_div(r56602, r56601, r56600, MPFR_RNDN);
        mpfr_div(r56603, r56600, r56602, MPFR_RNDN);
        mpfr_add(r56604, r56599, r56603, MPFR_RNDN);
        return mpfr_get_d(r56604, MPFR_RNDN);
}

