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

char *name = "subtraction fraction";

double f_if(float f, float n) {
        float r18034 = f;
        float r18035 = n;
        float r18036 = r18034 + r18035;
        float r18037 = -r18036;
        float r18038 = r18034 - r18035;
        float r18039 = r18037 / r18038;
        return r18039;
}

double f_id(double f, double n) {
        double r18040 = f;
        double r18041 = n;
        double r18042 = r18040 + r18041;
        double r18043 = -r18042;
        double r18044 = r18040 - r18041;
        double r18045 = r18043 / r18044;
        return r18045;
}


double f_of(float f, float n) {
        float r18046 = f;
        float r18047 = n;
        float r18048 = r18046 + r18047;
        float r18049 = -r18048;
        float r18050 = r18046 - r18047;
        float r18051 = r18049 / r18050;
        return r18051;
}

double f_od(double f, double n) {
        double r18052 = f;
        double r18053 = n;
        double r18054 = r18052 + r18053;
        double r18055 = -r18054;
        double r18056 = r18052 - r18053;
        double r18057 = r18055 / r18056;
        return r18057;
}

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 r18058, r18059, r18060, r18061, r18062, r18063;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r18058);
        mpfr_init(r18059);
        mpfr_init(r18060);
        mpfr_init(r18061);
        mpfr_init(r18062);
        mpfr_init(r18063);
}

double f_im(double f, double n) {
        mpfr_set_d(r18058, f, MPFR_RNDN);
        mpfr_set_d(r18059, n, MPFR_RNDN);
        mpfr_add(r18060, r18058, r18059, MPFR_RNDN);
        mpfr_neg(r18061, r18060, MPFR_RNDN);
        mpfr_sub(r18062, r18058, r18059, MPFR_RNDN);
        mpfr_div(r18063, r18061, r18062, MPFR_RNDN);
        return mpfr_get_d(r18063, MPFR_RNDN);
}

static mpfr_t r18064, r18065, r18066, r18067, r18068, r18069;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r18064);
        mpfr_init(r18065);
        mpfr_init(r18066);
        mpfr_init(r18067);
        mpfr_init(r18068);
        mpfr_init(r18069);
}

double f_fm(double f, double n) {
        mpfr_set_d(r18064, f, MPFR_RNDN);
        mpfr_set_d(r18065, n, MPFR_RNDN);
        mpfr_add(r18066, r18064, r18065, MPFR_RNDN);
        mpfr_neg(r18067, r18066, MPFR_RNDN);
        mpfr_sub(r18068, r18064, r18065, MPFR_RNDN);
        mpfr_div(r18069, r18067, r18068, MPFR_RNDN);
        return mpfr_get_d(r18069, MPFR_RNDN);
}

static mpfr_t r18070, r18071, r18072, r18073, r18074, r18075;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r18070);
        mpfr_init(r18071);
        mpfr_init(r18072);
        mpfr_init(r18073);
        mpfr_init(r18074);
        mpfr_init(r18075);
}

double f_dm(double f, double n) {
        mpfr_set_d(r18070, f, MPFR_RNDN);
        mpfr_set_d(r18071, n, MPFR_RNDN);
        mpfr_add(r18072, r18070, r18071, MPFR_RNDN);
        mpfr_neg(r18073, r18072, MPFR_RNDN);
        mpfr_sub(r18074, r18070, r18071, MPFR_RNDN);
        mpfr_div(r18075, r18073, r18074, MPFR_RNDN);
        return mpfr_get_d(r18075, MPFR_RNDN);
}

