#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 r26736 = a;
        float r26737 = r26736 * r26736;
        float r26738 = b;
        float r26739 = r26738 * r26738;
        float r26740 = r26737 - r26739;
        return r26740;
}

double f_id(double a, double b) {
        double r26741 = a;
        double r26742 = r26741 * r26741;
        double r26743 = b;
        double r26744 = r26743 * r26743;
        double r26745 = r26742 - r26744;
        return r26745;
}


double f_of(float a, float b) {
        float r26746 = a;
        float r26747 = r26746 * r26746;
        float r26748 = b;
        float r26749 = r26748 * r26748;
        float r26750 = r26747 - r26749;
        return r26750;
}

double f_od(double a, double b) {
        double r26751 = a;
        double r26752 = r26751 * r26751;
        double r26753 = b;
        double r26754 = r26753 * r26753;
        double r26755 = r26752 - r26754;
        return r26755;
}

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 r26756, r26757, r26758, r26759, r26760;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r26756);
        mpfr_init(r26757);
        mpfr_init(r26758);
        mpfr_init(r26759);
        mpfr_init(r26760);
}

double f_im(double a, double b) {
        mpfr_set_d(r26756, a, MPFR_RNDN);
        mpfr_mul(r26757, r26756, r26756, MPFR_RNDN);
        mpfr_set_d(r26758, b, MPFR_RNDN);
        mpfr_mul(r26759, r26758, r26758, MPFR_RNDN);
        mpfr_sub(r26760, r26757, r26759, MPFR_RNDN);
        return mpfr_get_d(r26760, MPFR_RNDN);
}

static mpfr_t r26761, r26762, r26763, r26764, r26765;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r26761);
        mpfr_init(r26762);
        mpfr_init(r26763);
        mpfr_init(r26764);
        mpfr_init(r26765);
}

double f_fm(double a, double b) {
        mpfr_set_d(r26761, a, MPFR_RNDN);
        mpfr_mul(r26762, r26761, r26761, MPFR_RNDN);
        mpfr_set_d(r26763, b, MPFR_RNDN);
        mpfr_mul(r26764, r26763, r26763, MPFR_RNDN);
        mpfr_sub(r26765, r26762, r26764, MPFR_RNDN);
        return mpfr_get_d(r26765, MPFR_RNDN);
}

static mpfr_t r26766, r26767, r26768, r26769, r26770;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r26766);
        mpfr_init(r26767);
        mpfr_init(r26768);
        mpfr_init(r26769);
        mpfr_init(r26770);
}

double f_dm(double a, double b) {
        mpfr_set_d(r26766, a, MPFR_RNDN);
        mpfr_mul(r26767, r26766, r26766, MPFR_RNDN);
        mpfr_set_d(r26768, b, MPFR_RNDN);
        mpfr_mul(r26769, r26768, r26768, MPFR_RNDN);
        mpfr_sub(r26770, r26767, r26769, MPFR_RNDN);
        return mpfr_get_d(r26770, MPFR_RNDN);
}

