#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 r10501 = a;
        float r10502 = r10501 * r10501;
        float r10503 = b;
        float r10504 = r10503 * r10503;
        float r10505 = r10502 - r10504;
        return r10505;
}

double f_id(double a, double b) {
        double r10506 = a;
        double r10507 = r10506 * r10506;
        double r10508 = b;
        double r10509 = r10508 * r10508;
        double r10510 = r10507 - r10509;
        return r10510;
}


double f_of(float a, float b) {
        float r10511 = a;
        float r10512 = r10511 * r10511;
        float r10513 = b;
        float r10514 = r10513 * r10513;
        float r10515 = r10512 - r10514;
        return r10515;
}

double f_od(double a, double b) {
        double r10516 = a;
        double r10517 = r10516 * r10516;
        double r10518 = b;
        double r10519 = r10518 * r10518;
        double r10520 = r10517 - r10519;
        return r10520;
}

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 r10521, r10522, r10523, r10524, r10525;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10521);
        mpfr_init(r10522);
        mpfr_init(r10523);
        mpfr_init(r10524);
        mpfr_init(r10525);
}

double f_im(double a, double b) {
        mpfr_set_d(r10521, a, MPFR_RNDN);
        mpfr_mul(r10522, r10521, r10521, MPFR_RNDN);
        mpfr_set_d(r10523, b, MPFR_RNDN);
        mpfr_mul(r10524, r10523, r10523, MPFR_RNDN);
        mpfr_sub(r10525, r10522, r10524, MPFR_RNDN);
        return mpfr_get_d(r10525, MPFR_RNDN);
}

static mpfr_t r10526, r10527, r10528, r10529, r10530;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10526);
        mpfr_init(r10527);
        mpfr_init(r10528);
        mpfr_init(r10529);
        mpfr_init(r10530);
}

double f_fm(double a, double b) {
        mpfr_set_d(r10526, a, MPFR_RNDN);
        mpfr_mul(r10527, r10526, r10526, MPFR_RNDN);
        mpfr_set_d(r10528, b, MPFR_RNDN);
        mpfr_mul(r10529, r10528, r10528, MPFR_RNDN);
        mpfr_sub(r10530, r10527, r10529, MPFR_RNDN);
        return mpfr_get_d(r10530, MPFR_RNDN);
}

static mpfr_t r10531, r10532, r10533, r10534, r10535;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10531);
        mpfr_init(r10532);
        mpfr_init(r10533);
        mpfr_init(r10534);
        mpfr_init(r10535);
}

double f_dm(double a, double b) {
        mpfr_set_d(r10531, a, MPFR_RNDN);
        mpfr_mul(r10532, r10531, r10531, MPFR_RNDN);
        mpfr_set_d(r10533, b, MPFR_RNDN);
        mpfr_mul(r10534, r10533, r10533, MPFR_RNDN);
        mpfr_sub(r10535, r10532, r10534, MPFR_RNDN);
        return mpfr_get_d(r10535, MPFR_RNDN);
}

