#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 r9494 = a;
        float r9495 = r9494 * r9494;
        float r9496 = b;
        float r9497 = r9496 * r9496;
        float r9498 = r9495 - r9497;
        return r9498;
}

double f_id(double a, double b) {
        double r9499 = a;
        double r9500 = r9499 * r9499;
        double r9501 = b;
        double r9502 = r9501 * r9501;
        double r9503 = r9500 - r9502;
        return r9503;
}


double f_of(float a, float b) {
        float r9504 = a;
        float r9505 = r9504 * r9504;
        float r9506 = b;
        float r9507 = r9506 * r9506;
        float r9508 = r9505 - r9507;
        return r9508;
}

double f_od(double a, double b) {
        double r9509 = a;
        double r9510 = r9509 * r9509;
        double r9511 = b;
        double r9512 = r9511 * r9511;
        double r9513 = r9510 - r9512;
        return r9513;
}

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 r9514, r9515, r9516, r9517, r9518;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9514);
        mpfr_init(r9515);
        mpfr_init(r9516);
        mpfr_init(r9517);
        mpfr_init(r9518);
}

double f_im(double a, double b) {
        mpfr_set_d(r9514, a, MPFR_RNDN);
        mpfr_mul(r9515, r9514, r9514, MPFR_RNDN);
        mpfr_set_d(r9516, b, MPFR_RNDN);
        mpfr_mul(r9517, r9516, r9516, MPFR_RNDN);
        mpfr_sub(r9518, r9515, r9517, MPFR_RNDN);
        return mpfr_get_d(r9518, MPFR_RNDN);
}

static mpfr_t r9519, r9520, r9521, r9522, r9523;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9519);
        mpfr_init(r9520);
        mpfr_init(r9521);
        mpfr_init(r9522);
        mpfr_init(r9523);
}

double f_fm(double a, double b) {
        mpfr_set_d(r9519, a, MPFR_RNDN);
        mpfr_mul(r9520, r9519, r9519, MPFR_RNDN);
        mpfr_set_d(r9521, b, MPFR_RNDN);
        mpfr_mul(r9522, r9521, r9521, MPFR_RNDN);
        mpfr_sub(r9523, r9520, r9522, MPFR_RNDN);
        return mpfr_get_d(r9523, MPFR_RNDN);
}

static mpfr_t r9524, r9525, r9526, r9527, r9528;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9524);
        mpfr_init(r9525);
        mpfr_init(r9526);
        mpfr_init(r9527);
        mpfr_init(r9528);
}

double f_dm(double a, double b) {
        mpfr_set_d(r9524, a, MPFR_RNDN);
        mpfr_mul(r9525, r9524, r9524, MPFR_RNDN);
        mpfr_set_d(r9526, b, MPFR_RNDN);
        mpfr_mul(r9527, r9526, r9526, MPFR_RNDN);
        mpfr_sub(r9528, r9525, r9527, MPFR_RNDN);
        return mpfr_get_d(r9528, MPFR_RNDN);
}

