#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 r51938 = a;
        float r51939 = r51938 * r51938;
        float r51940 = b;
        float r51941 = r51940 * r51940;
        float r51942 = r51939 - r51941;
        return r51942;
}

double f_id(double a, double b) {
        double r51943 = a;
        double r51944 = r51943 * r51943;
        double r51945 = b;
        double r51946 = r51945 * r51945;
        double r51947 = r51944 - r51946;
        return r51947;
}


double f_of(float a, float b) {
        float r51948 = a;
        float r51949 = r51948 * r51948;
        float r51950 = b;
        float r51951 = r51950 * r51950;
        float r51952 = r51949 - r51951;
        return r51952;
}

double f_od(double a, double b) {
        double r51953 = a;
        double r51954 = r51953 * r51953;
        double r51955 = b;
        double r51956 = r51955 * r51955;
        double r51957 = r51954 - r51956;
        return r51957;
}

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 r51958, r51959, r51960, r51961, r51962;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51958);
        mpfr_init(r51959);
        mpfr_init(r51960);
        mpfr_init(r51961);
        mpfr_init(r51962);
}

double f_im(double a, double b) {
        mpfr_set_d(r51958, a, MPFR_RNDN);
        mpfr_mul(r51959, r51958, r51958, MPFR_RNDN);
        mpfr_set_d(r51960, b, MPFR_RNDN);
        mpfr_mul(r51961, r51960, r51960, MPFR_RNDN);
        mpfr_sub(r51962, r51959, r51961, MPFR_RNDN);
        return mpfr_get_d(r51962, MPFR_RNDN);
}

static mpfr_t r51963, r51964, r51965, r51966, r51967;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51963);
        mpfr_init(r51964);
        mpfr_init(r51965);
        mpfr_init(r51966);
        mpfr_init(r51967);
}

double f_fm(double a, double b) {
        mpfr_set_d(r51963, a, MPFR_RNDN);
        mpfr_mul(r51964, r51963, r51963, MPFR_RNDN);
        mpfr_set_d(r51965, b, MPFR_RNDN);
        mpfr_mul(r51966, r51965, r51965, MPFR_RNDN);
        mpfr_sub(r51967, r51964, r51966, MPFR_RNDN);
        return mpfr_get_d(r51967, MPFR_RNDN);
}

static mpfr_t r51968, r51969, r51970, r51971, r51972;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51968);
        mpfr_init(r51969);
        mpfr_init(r51970);
        mpfr_init(r51971);
        mpfr_init(r51972);
}

double f_dm(double a, double b) {
        mpfr_set_d(r51968, a, MPFR_RNDN);
        mpfr_mul(r51969, r51968, r51968, MPFR_RNDN);
        mpfr_set_d(r51970, b, MPFR_RNDN);
        mpfr_mul(r51971, r51970, r51970, MPFR_RNDN);
        mpfr_sub(r51972, r51969, r51971, MPFR_RNDN);
        return mpfr_get_d(r51972, MPFR_RNDN);
}

