#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Graphics.Rasterific.Linear:$cquadrance from Rasterific-0.6.1";

double f_if(float x, float y) {
        float r32347 = x;
        float r32348 = r32347 * r32347;
        float r32349 = y;
        float r32350 = r32349 * r32349;
        float r32351 = r32348 + r32350;
        return r32351;
}

double f_id(double x, double y) {
        double r32352 = x;
        double r32353 = r32352 * r32352;
        double r32354 = y;
        double r32355 = r32354 * r32354;
        double r32356 = r32353 + r32355;
        return r32356;
}


double f_of(float x, float y) {
        float r32357 = x;
        float r32358 = r32357 * r32357;
        float r32359 = y;
        float r32360 = r32359 * r32359;
        float r32361 = r32358 + r32360;
        return r32361;
}

double f_od(double x, double y) {
        double r32362 = x;
        double r32363 = r32362 * r32362;
        double r32364 = y;
        double r32365 = r32364 * r32364;
        double r32366 = r32363 + r32365;
        return r32366;
}

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 r32367, r32368, r32369, r32370, r32371;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32367);
        mpfr_init(r32368);
        mpfr_init(r32369);
        mpfr_init(r32370);
        mpfr_init(r32371);
}

double f_im(double x, double y) {
        mpfr_set_d(r32367, x, MPFR_RNDN);
        mpfr_mul(r32368, r32367, r32367, MPFR_RNDN);
        mpfr_set_d(r32369, y, MPFR_RNDN);
        mpfr_mul(r32370, r32369, r32369, MPFR_RNDN);
        mpfr_add(r32371, r32368, r32370, MPFR_RNDN);
        return mpfr_get_d(r32371, MPFR_RNDN);
}

static mpfr_t r32372, r32373, r32374, r32375, r32376;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32372);
        mpfr_init(r32373);
        mpfr_init(r32374);
        mpfr_init(r32375);
        mpfr_init(r32376);
}

double f_fm(double x, double y) {
        mpfr_set_d(r32372, x, MPFR_RNDN);
        mpfr_mul(r32373, r32372, r32372, MPFR_RNDN);
        mpfr_set_d(r32374, y, MPFR_RNDN);
        mpfr_mul(r32375, r32374, r32374, MPFR_RNDN);
        mpfr_add(r32376, r32373, r32375, MPFR_RNDN);
        return mpfr_get_d(r32376, MPFR_RNDN);
}

static mpfr_t r32377, r32378, r32379, r32380, r32381;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32377);
        mpfr_init(r32378);
        mpfr_init(r32379);
        mpfr_init(r32380);
        mpfr_init(r32381);
}

double f_dm(double x, double y) {
        mpfr_set_d(r32377, x, MPFR_RNDN);
        mpfr_mul(r32378, r32377, r32377, MPFR_RNDN);
        mpfr_set_d(r32379, y, MPFR_RNDN);
        mpfr_mul(r32380, r32379, r32379, MPFR_RNDN);
        mpfr_add(r32381, r32378, r32380, MPFR_RNDN);
        return mpfr_get_d(r32381, MPFR_RNDN);
}

