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

char *name = "Data.Colour.CIE:cieLAB from colour-2.3.3, A";

double f_if(float x, float y) {
        float r57277 = x;
        float r57278 = 16.0;
        float r57279 = 116.0;
        float r57280 = r57278 / r57279;
        float r57281 = r57277 - r57280;
        float r57282 = 3.0;
        float r57283 = r57281 * r57282;
        float r57284 = y;
        float r57285 = r57283 * r57284;
        return r57285;
}

double f_id(double x, double y) {
        double r57286 = x;
        double r57287 = 16.0;
        double r57288 = 116.0;
        double r57289 = r57287 / r57288;
        double r57290 = r57286 - r57289;
        double r57291 = 3.0;
        double r57292 = r57290 * r57291;
        double r57293 = y;
        double r57294 = r57292 * r57293;
        return r57294;
}


double f_of(float x, float y) {
        float r57295 = x;
        float r57296 = 16.0;
        float r57297 = 116.0;
        float r57298 = r57296 / r57297;
        float r57299 = r57295 - r57298;
        float r57300 = 3.0;
        float r57301 = y;
        float r57302 = r57300 * r57301;
        float r57303 = r57299 * r57302;
        return r57303;
}

double f_od(double x, double y) {
        double r57304 = x;
        double r57305 = 16.0;
        double r57306 = 116.0;
        double r57307 = r57305 / r57306;
        double r57308 = r57304 - r57307;
        double r57309 = 3.0;
        double r57310 = y;
        double r57311 = r57309 * r57310;
        double r57312 = r57308 * r57311;
        return r57312;
}

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 r57313, r57314, r57315, r57316, r57317, r57318, r57319, r57320, r57321;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57313);
        mpfr_init_set_str(r57314, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57315, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57316);
        mpfr_init(r57317);
        mpfr_init_set_str(r57318, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57319);
        mpfr_init(r57320);
        mpfr_init(r57321);
}

double f_im(double x, double y) {
        mpfr_set_d(r57313, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57316, r57314, r57315, MPFR_RNDN);
        mpfr_sub(r57317, r57313, r57316, MPFR_RNDN);
        ;
        mpfr_mul(r57319, r57317, r57318, MPFR_RNDN);
        mpfr_set_d(r57320, y, MPFR_RNDN);
        mpfr_mul(r57321, r57319, r57320, MPFR_RNDN);
        return mpfr_get_d(r57321, MPFR_RNDN);
}

static mpfr_t r57322, r57323, r57324, r57325, r57326, r57327, r57328, r57329, r57330;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57322);
        mpfr_init_set_str(r57323, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57324, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57325);
        mpfr_init(r57326);
        mpfr_init_set_str(r57327, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57328);
        mpfr_init(r57329);
        mpfr_init(r57330);
}

double f_fm(double x, double y) {
        mpfr_set_d(r57322, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57325, r57323, r57324, MPFR_RNDN);
        mpfr_sub(r57326, r57322, r57325, MPFR_RNDN);
        ;
        mpfr_set_d(r57328, y, MPFR_RNDN);
        mpfr_mul(r57329, r57327, r57328, MPFR_RNDN);
        mpfr_mul(r57330, r57326, r57329, MPFR_RNDN);
        return mpfr_get_d(r57330, MPFR_RNDN);
}

static mpfr_t r57331, r57332, r57333, r57334, r57335, r57336, r57337, r57338, r57339;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57331);
        mpfr_init_set_str(r57332, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57333, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57334);
        mpfr_init(r57335);
        mpfr_init_set_str(r57336, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57337);
        mpfr_init(r57338);
        mpfr_init(r57339);
}

double f_dm(double x, double y) {
        mpfr_set_d(r57331, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57334, r57332, r57333, MPFR_RNDN);
        mpfr_sub(r57335, r57331, r57334, MPFR_RNDN);
        ;
        mpfr_set_d(r57337, y, MPFR_RNDN);
        mpfr_mul(r57338, r57336, r57337, MPFR_RNDN);
        mpfr_mul(r57339, r57335, r57338, MPFR_RNDN);
        return mpfr_get_d(r57339, MPFR_RNDN);
}

