#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 r57780 = x;
        float r57781 = y;
        float r57782 = r57781 * r57781;
        float r57783 = z;
        float r57784 = r57782 / r57783;
        float r57785 = r57780 + r57784;
        return r57785;
}

double f_id(double x, double y, double z) {
        double r57786 = x;
        double r57787 = y;
        double r57788 = r57787 * r57787;
        double r57789 = z;
        double r57790 = r57788 / r57789;
        double r57791 = r57786 + r57790;
        return r57791;
}


double f_of(float x, float y, float z) {
        float r57792 = x;
        float r57793 = y;
        float r57794 = z;
        float r57795 = r57794 / r57793;
        float r57796 = r57793 / r57795;
        float r57797 = r57792 + r57796;
        return r57797;
}

double f_od(double x, double y, double z) {
        double r57798 = x;
        double r57799 = y;
        double r57800 = z;
        double r57801 = r57800 / r57799;
        double r57802 = r57799 / r57801;
        double r57803 = r57798 + r57802;
        return r57803;
}

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 r57804, r57805, r57806, r57807, r57808, r57809;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57804);
        mpfr_init(r57805);
        mpfr_init(r57806);
        mpfr_init(r57807);
        mpfr_init(r57808);
        mpfr_init(r57809);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r57804, x, MPFR_RNDN);
        mpfr_set_d(r57805, y, MPFR_RNDN);
        mpfr_mul(r57806, r57805, r57805, MPFR_RNDN);
        mpfr_set_d(r57807, z, MPFR_RNDN);
        mpfr_div(r57808, r57806, r57807, MPFR_RNDN);
        mpfr_add(r57809, r57804, r57808, MPFR_RNDN);
        return mpfr_get_d(r57809, MPFR_RNDN);
}

static mpfr_t r57810, r57811, r57812, r57813, r57814, r57815;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57810);
        mpfr_init(r57811);
        mpfr_init(r57812);
        mpfr_init(r57813);
        mpfr_init(r57814);
        mpfr_init(r57815);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r57810, x, MPFR_RNDN);
        mpfr_set_d(r57811, y, MPFR_RNDN);
        mpfr_set_d(r57812, z, MPFR_RNDN);
        mpfr_div(r57813, r57812, r57811, MPFR_RNDN);
        mpfr_div(r57814, r57811, r57813, MPFR_RNDN);
        mpfr_add(r57815, r57810, r57814, MPFR_RNDN);
        return mpfr_get_d(r57815, MPFR_RNDN);
}

static mpfr_t r57816, r57817, r57818, r57819, r57820, r57821;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57816);
        mpfr_init(r57817);
        mpfr_init(r57818);
        mpfr_init(r57819);
        mpfr_init(r57820);
        mpfr_init(r57821);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r57816, x, MPFR_RNDN);
        mpfr_set_d(r57817, y, MPFR_RNDN);
        mpfr_set_d(r57818, z, MPFR_RNDN);
        mpfr_div(r57819, r57818, r57817, MPFR_RNDN);
        mpfr_div(r57820, r57817, r57819, MPFR_RNDN);
        mpfr_add(r57821, r57816, r57820, MPFR_RNDN);
        return mpfr_get_d(r57821, MPFR_RNDN);
}

