#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 r26496 = a;
        float r26497 = r26496 * r26496;
        float r26498 = b;
        float r26499 = r26498 * r26498;
        float r26500 = r26497 - r26499;
        return r26500;
}

double f_id(double a, double b) {
        double r26501 = a;
        double r26502 = r26501 * r26501;
        double r26503 = b;
        double r26504 = r26503 * r26503;
        double r26505 = r26502 - r26504;
        return r26505;
}


double f_of(float a, float b) {
        float r26506 = a;
        float r26507 = r26506 * r26506;
        float r26508 = b;
        float r26509 = r26508 * r26508;
        float r26510 = r26507 - r26509;
        return r26510;
}

double f_od(double a, double b) {
        double r26511 = a;
        double r26512 = r26511 * r26511;
        double r26513 = b;
        double r26514 = r26513 * r26513;
        double r26515 = r26512 - r26514;
        return r26515;
}

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 r26516, r26517, r26518, r26519, r26520;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r26516);
        mpfr_init(r26517);
        mpfr_init(r26518);
        mpfr_init(r26519);
        mpfr_init(r26520);
}

double f_im(double a, double b) {
        mpfr_set_d(r26516, a, MPFR_RNDN);
        mpfr_mul(r26517, r26516, r26516, MPFR_RNDN);
        mpfr_set_d(r26518, b, MPFR_RNDN);
        mpfr_mul(r26519, r26518, r26518, MPFR_RNDN);
        mpfr_sub(r26520, r26517, r26519, MPFR_RNDN);
        return mpfr_get_d(r26520, MPFR_RNDN);
}

static mpfr_t r26521, r26522, r26523, r26524, r26525;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r26521);
        mpfr_init(r26522);
        mpfr_init(r26523);
        mpfr_init(r26524);
        mpfr_init(r26525);
}

double f_fm(double a, double b) {
        mpfr_set_d(r26521, a, MPFR_RNDN);
        mpfr_mul(r26522, r26521, r26521, MPFR_RNDN);
        mpfr_set_d(r26523, b, MPFR_RNDN);
        mpfr_mul(r26524, r26523, r26523, MPFR_RNDN);
        mpfr_sub(r26525, r26522, r26524, MPFR_RNDN);
        return mpfr_get_d(r26525, MPFR_RNDN);
}

static mpfr_t r26526, r26527, r26528, r26529, r26530;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r26526);
        mpfr_init(r26527);
        mpfr_init(r26528);
        mpfr_init(r26529);
        mpfr_init(r26530);
}

double f_dm(double a, double b) {
        mpfr_set_d(r26526, a, MPFR_RNDN);
        mpfr_mul(r26527, r26526, r26526, MPFR_RNDN);
        mpfr_set_d(r26528, b, MPFR_RNDN);
        mpfr_mul(r26529, r26528, r26528, MPFR_RNDN);
        mpfr_sub(r26530, r26527, r26529, MPFR_RNDN);
        return mpfr_get_d(r26530, MPFR_RNDN);
}

