#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 r9505 = a;
        float r9506 = r9505 * r9505;
        float r9507 = b;
        float r9508 = r9507 * r9507;
        float r9509 = r9506 - r9508;
        return r9509;
}

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


double f_of(float a, float b) {
        float r9515 = a;
        float r9516 = r9515 * r9515;
        float r9517 = b;
        float r9518 = r9517 * r9517;
        float r9519 = r9516 - r9518;
        return r9519;
}

double f_od(double a, double b) {
        double r9520 = a;
        double r9521 = r9520 * r9520;
        double r9522 = b;
        double r9523 = r9522 * r9522;
        double r9524 = r9521 - r9523;
        return r9524;
}

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 r9525, r9526, r9527, r9528, r9529;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9525);
        mpfr_init(r9526);
        mpfr_init(r9527);
        mpfr_init(r9528);
        mpfr_init(r9529);
}

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

static mpfr_t r9530, r9531, r9532, r9533, r9534;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9530);
        mpfr_init(r9531);
        mpfr_init(r9532);
        mpfr_init(r9533);
        mpfr_init(r9534);
}

double f_fm(double a, double b) {
        mpfr_set_d(r9530, a, MPFR_RNDN);
        mpfr_mul(r9531, r9530, r9530, MPFR_RNDN);
        mpfr_set_d(r9532, b, MPFR_RNDN);
        mpfr_mul(r9533, r9532, r9532, MPFR_RNDN);
        mpfr_sub(r9534, r9531, r9533, MPFR_RNDN);
        return mpfr_get_d(r9534, MPFR_RNDN);
}

static mpfr_t r9535, r9536, r9537, r9538, r9539;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9535);
        mpfr_init(r9536);
        mpfr_init(r9537);
        mpfr_init(r9538);
        mpfr_init(r9539);
}

double f_dm(double a, double b) {
        mpfr_set_d(r9535, a, MPFR_RNDN);
        mpfr_mul(r9536, r9535, r9535, MPFR_RNDN);
        mpfr_set_d(r9537, b, MPFR_RNDN);
        mpfr_mul(r9538, r9537, r9537, MPFR_RNDN);
        mpfr_sub(r9539, r9536, r9538, MPFR_RNDN);
        return mpfr_get_d(r9539, MPFR_RNDN);
}

