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

char *name = "FastMath test2";

double f_if(float d1, float d2) {
        float r56509879 = d1;
        float r56509880 = 10;
        float r56509881 = r56509879 * r56509880;
        float r56509882 = d2;
        float r56509883 = r56509879 * r56509882;
        float r56509884 = r56509881 + r56509883;
        float r56509885 = 20;
        float r56509886 = r56509879 * r56509885;
        float r56509887 = r56509884 + r56509886;
        return r56509887;
}

double f_id(double d1, double d2) {
        double r56509888 = d1;
        double r56509889 = 10;
        double r56509890 = r56509888 * r56509889;
        double r56509891 = d2;
        double r56509892 = r56509888 * r56509891;
        double r56509893 = r56509890 + r56509892;
        double r56509894 = 20;
        double r56509895 = r56509888 * r56509894;
        double r56509896 = r56509893 + r56509895;
        return r56509896;
}


double f_of(float d1, float d2) {
        float r56509897 = d2;
        float r56509898 = 10;
        float r56509899 = r56509897 + r56509898;
        float r56509900 = 20;
        float r56509901 = r56509899 + r56509900;
        float r56509902 = d1;
        float r56509903 = r56509901 * r56509902;
        return r56509903;
}

double f_od(double d1, double d2) {
        double r56509904 = d2;
        double r56509905 = 10;
        double r56509906 = r56509904 + r56509905;
        double r56509907 = 20;
        double r56509908 = r56509906 + r56509907;
        double r56509909 = d1;
        double r56509910 = r56509908 * r56509909;
        return r56509910;
}

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 r56509911, r56509912, r56509913, r56509914, r56509915, r56509916, r56509917, r56509918, r56509919;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r56509911);
        mpfr_init_set_str(r56509912, "10", 10, MPFR_RNDN);
        mpfr_init(r56509913);
        mpfr_init(r56509914);
        mpfr_init(r56509915);
        mpfr_init(r56509916);
        mpfr_init_set_str(r56509917, "20", 10, MPFR_RNDN);
        mpfr_init(r56509918);
        mpfr_init(r56509919);
}

double f_im(double d1, double d2) {
        mpfr_set_d(r56509911, d1, MPFR_RNDN);
        ;
        mpfr_mul(r56509913, r56509911, r56509912, MPFR_RNDN);
        mpfr_set_d(r56509914, d2, MPFR_RNDN);
        mpfr_mul(r56509915, r56509911, r56509914, MPFR_RNDN);
        mpfr_add(r56509916, r56509913, r56509915, MPFR_RNDN);
        ;
        mpfr_mul(r56509918, r56509911, r56509917, MPFR_RNDN);
        mpfr_add(r56509919, r56509916, r56509918, MPFR_RNDN);
        return mpfr_get_d(r56509919, MPFR_RNDN);
}

static mpfr_t r56509920, r56509921, r56509922, r56509923, r56509924, r56509925, r56509926;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r56509920);
        mpfr_init_set_str(r56509921, "10", 10, MPFR_RNDN);
        mpfr_init(r56509922);
        mpfr_init_set_str(r56509923, "20", 10, MPFR_RNDN);
        mpfr_init(r56509924);
        mpfr_init(r56509925);
        mpfr_init(r56509926);
}

double f_fm(double d1, double d2) {
        mpfr_set_d(r56509920, d2, MPFR_RNDN);
        ;
        mpfr_add(r56509922, r56509920, r56509921, MPFR_RNDN);
        ;
        mpfr_add(r56509924, r56509922, r56509923, MPFR_RNDN);
        mpfr_set_d(r56509925, d1, MPFR_RNDN);
        mpfr_mul(r56509926, r56509924, r56509925, MPFR_RNDN);
        return mpfr_get_d(r56509926, MPFR_RNDN);
}

static mpfr_t r56509927, r56509928, r56509929, r56509930, r56509931, r56509932, r56509933;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r56509927);
        mpfr_init_set_str(r56509928, "10", 10, MPFR_RNDN);
        mpfr_init(r56509929);
        mpfr_init_set_str(r56509930, "20", 10, MPFR_RNDN);
        mpfr_init(r56509931);
        mpfr_init(r56509932);
        mpfr_init(r56509933);
}

double f_dm(double d1, double d2) {
        mpfr_set_d(r56509927, d2, MPFR_RNDN);
        ;
        mpfr_add(r56509929, r56509927, r56509928, MPFR_RNDN);
        ;
        mpfr_add(r56509931, r56509929, r56509930, MPFR_RNDN);
        mpfr_set_d(r56509932, d1, MPFR_RNDN);
        mpfr_mul(r56509933, r56509931, r56509932, MPFR_RNDN);
        return mpfr_get_d(r56509933, MPFR_RNDN);
}

