#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 r9575 = a;
        float r9576 = r9575 * r9575;
        float r9577 = b;
        float r9578 = r9577 * r9577;
        float r9579 = r9576 - r9578;
        return r9579;
}

double f_id(double a, double b) {
        double r9580 = a;
        double r9581 = r9580 * r9580;
        double r9582 = b;
        double r9583 = r9582 * r9582;
        double r9584 = r9581 - r9583;
        return r9584;
}


double f_of(float a, float b) {
        float r9585 = b;
        float r9586 = a;
        float r9587 = r9585 + r9586;
        float r9588 = r9586 - r9585;
        float r9589 = r9587 * r9588;
        return r9589;
}

double f_od(double a, double b) {
        double r9590 = b;
        double r9591 = a;
        double r9592 = r9590 + r9591;
        double r9593 = r9591 - r9590;
        double r9594 = r9592 * r9593;
        return r9594;
}

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 r9595, r9596, r9597, r9598, r9599;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9595);
        mpfr_init(r9596);
        mpfr_init(r9597);
        mpfr_init(r9598);
        mpfr_init(r9599);
}

double f_im(double a, double b) {
        mpfr_set_d(r9595, a, MPFR_RNDN);
        mpfr_mul(r9596, r9595, r9595, MPFR_RNDN);
        mpfr_set_d(r9597, b, MPFR_RNDN);
        mpfr_mul(r9598, r9597, r9597, MPFR_RNDN);
        mpfr_sub(r9599, r9596, r9598, MPFR_RNDN);
        return mpfr_get_d(r9599, MPFR_RNDN);
}

static mpfr_t r9600, r9601, r9602, r9603, r9604;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9600);
        mpfr_init(r9601);
        mpfr_init(r9602);
        mpfr_init(r9603);
        mpfr_init(r9604);
}

double f_fm(double a, double b) {
        mpfr_set_d(r9600, b, MPFR_RNDN);
        mpfr_set_d(r9601, a, MPFR_RNDN);
        mpfr_add(r9602, r9600, r9601, MPFR_RNDN);
        mpfr_sub(r9603, r9601, r9600, MPFR_RNDN);
        mpfr_mul(r9604, r9602, r9603, MPFR_RNDN);
        return mpfr_get_d(r9604, MPFR_RNDN);
}

static mpfr_t r9605, r9606, r9607, r9608, r9609;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9605);
        mpfr_init(r9606);
        mpfr_init(r9607);
        mpfr_init(r9608);
        mpfr_init(r9609);
}

double f_dm(double a, double b) {
        mpfr_set_d(r9605, b, MPFR_RNDN);
        mpfr_set_d(r9606, a, MPFR_RNDN);
        mpfr_add(r9607, r9605, r9606, MPFR_RNDN);
        mpfr_sub(r9608, r9606, r9605, MPFR_RNDN);
        mpfr_mul(r9609, r9607, r9608, MPFR_RNDN);
        return mpfr_get_d(r9609, MPFR_RNDN);
}

