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

char *name = "Examples.Basics.BasicTests:f1 from sbv-4.4";

double f_if(float x, float y) {
        float r51997 = x;
        float r51998 = y;
        float r51999 = r51997 + r51998;
        float r52000 = r51997 - r51998;
        float r52001 = r51999 * r52000;
        return r52001;
}

double f_id(double x, double y) {
        double r52002 = x;
        double r52003 = y;
        double r52004 = r52002 + r52003;
        double r52005 = r52002 - r52003;
        double r52006 = r52004 * r52005;
        return r52006;
}


double f_of(float x, float y) {
        float r52007 = x;
        float r52008 = y;
        float r52009 = r52007 + r52008;
        float r52010 = r52007 - r52008;
        float r52011 = r52009 * r52010;
        return r52011;
}

double f_od(double x, double y) {
        double r52012 = x;
        double r52013 = y;
        double r52014 = r52012 + r52013;
        double r52015 = r52012 - r52013;
        double r52016 = r52014 * r52015;
        return r52016;
}

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 r52017, r52018, r52019, r52020, r52021;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52017);
        mpfr_init(r52018);
        mpfr_init(r52019);
        mpfr_init(r52020);
        mpfr_init(r52021);
}

double f_im(double x, double y) {
        mpfr_set_d(r52017, x, MPFR_RNDN);
        mpfr_set_d(r52018, y, MPFR_RNDN);
        mpfr_add(r52019, r52017, r52018, MPFR_RNDN);
        mpfr_sub(r52020, r52017, r52018, MPFR_RNDN);
        mpfr_mul(r52021, r52019, r52020, MPFR_RNDN);
        return mpfr_get_d(r52021, MPFR_RNDN);
}

static mpfr_t r52022, r52023, r52024, r52025, r52026;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52022);
        mpfr_init(r52023);
        mpfr_init(r52024);
        mpfr_init(r52025);
        mpfr_init(r52026);
}

double f_fm(double x, double y) {
        mpfr_set_d(r52022, x, MPFR_RNDN);
        mpfr_set_d(r52023, y, MPFR_RNDN);
        mpfr_add(r52024, r52022, r52023, MPFR_RNDN);
        mpfr_sub(r52025, r52022, r52023, MPFR_RNDN);
        mpfr_mul(r52026, r52024, r52025, MPFR_RNDN);
        return mpfr_get_d(r52026, MPFR_RNDN);
}

static mpfr_t r52027, r52028, r52029, r52030, r52031;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52027);
        mpfr_init(r52028);
        mpfr_init(r52029);
        mpfr_init(r52030);
        mpfr_init(r52031);
}

double f_dm(double x, double y) {
        mpfr_set_d(r52027, x, MPFR_RNDN);
        mpfr_set_d(r52028, y, MPFR_RNDN);
        mpfr_add(r52029, r52027, r52028, MPFR_RNDN);
        mpfr_sub(r52030, r52027, r52028, MPFR_RNDN);
        mpfr_mul(r52031, r52029, r52030, MPFR_RNDN);
        return mpfr_get_d(r52031, MPFR_RNDN);
}

