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

char *name = "Difference of squares";

double f_if(float a, float b) {
        float r10273 = a;
        float r10274 = r10273 * r10273;
        float r10275 = b;
        float r10276 = r10275 * r10275;
        float r10277 = r10274 - r10276;
        return r10277;
}

double f_id(double a, double b) {
        double r10278 = a;
        double r10279 = r10278 * r10278;
        double r10280 = b;
        double r10281 = r10280 * r10280;
        double r10282 = r10279 - r10281;
        return r10282;
}


double f_of(float a, float b) {
        float r10283 = a;
        float r10284 = b;
        float r10285 = r10283 + r10284;
        float r10286 = r10283 - r10284;
        float r10287 = r10285 * r10286;
        return r10287;
}

double f_od(double a, double b) {
        double r10288 = a;
        double r10289 = b;
        double r10290 = r10288 + r10289;
        double r10291 = r10288 - r10289;
        double r10292 = r10290 * r10291;
        return r10292;
}

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 r10293, r10294, r10295, r10296, r10297;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10293);
        mpfr_init(r10294);
        mpfr_init(r10295);
        mpfr_init(r10296);
        mpfr_init(r10297);
}

double f_im(double a, double b) {
        mpfr_set_d(r10293, a, MPFR_RNDN);
        mpfr_mul(r10294, r10293, r10293, MPFR_RNDN);
        mpfr_set_d(r10295, b, MPFR_RNDN);
        mpfr_mul(r10296, r10295, r10295, MPFR_RNDN);
        mpfr_sub(r10297, r10294, r10296, MPFR_RNDN);
        return mpfr_get_d(r10297, MPFR_RNDN);
}

static mpfr_t r10298, r10299, r10300, r10301, r10302;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10298);
        mpfr_init(r10299);
        mpfr_init(r10300);
        mpfr_init(r10301);
        mpfr_init(r10302);
}

double f_fm(double a, double b) {
        mpfr_set_d(r10298, a, MPFR_RNDN);
        mpfr_set_d(r10299, b, MPFR_RNDN);
        mpfr_add(r10300, r10298, r10299, MPFR_RNDN);
        mpfr_sub(r10301, r10298, r10299, MPFR_RNDN);
        mpfr_mul(r10302, r10300, r10301, MPFR_RNDN);
        return mpfr_get_d(r10302, MPFR_RNDN);
}

static mpfr_t r10303, r10304, r10305, r10306, r10307;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10303);
        mpfr_init(r10304);
        mpfr_init(r10305);
        mpfr_init(r10306);
        mpfr_init(r10307);
}

double f_dm(double a, double b) {
        mpfr_set_d(r10303, a, MPFR_RNDN);
        mpfr_set_d(r10304, b, MPFR_RNDN);
        mpfr_add(r10305, r10303, r10304, MPFR_RNDN);
        mpfr_sub(r10306, r10303, r10304, MPFR_RNDN);
        mpfr_mul(r10307, r10305, r10306, MPFR_RNDN);
        return mpfr_get_d(r10307, MPFR_RNDN);
}

