#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 r57133 = x;
        float r57134 = 16.0;
        float r57135 = 116.0;
        float r57136 = r57134 / r57135;
        float r57137 = r57133 - r57136;
        float r57138 = 3.0;
        float r57139 = r57137 * r57138;
        float r57140 = y;
        float r57141 = r57139 * r57140;
        return r57141;
}

double f_id(double x, double y) {
        double r57142 = x;
        double r57143 = 16.0;
        double r57144 = 116.0;
        double r57145 = r57143 / r57144;
        double r57146 = r57142 - r57145;
        double r57147 = 3.0;
        double r57148 = r57146 * r57147;
        double r57149 = y;
        double r57150 = r57148 * r57149;
        return r57150;
}


double f_of(float x, float y) {
        float r57151 = x;
        float r57152 = 16.0;
        float r57153 = 116.0;
        float r57154 = r57152 / r57153;
        float r57155 = r57151 - r57154;
        float r57156 = 3.0;
        float r57157 = y;
        float r57158 = r57156 * r57157;
        float r57159 = r57155 * r57158;
        return r57159;
}

double f_od(double x, double y) {
        double r57160 = x;
        double r57161 = 16.0;
        double r57162 = 116.0;
        double r57163 = r57161 / r57162;
        double r57164 = r57160 - r57163;
        double r57165 = 3.0;
        double r57166 = y;
        double r57167 = r57165 * r57166;
        double r57168 = r57164 * r57167;
        return r57168;
}

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 r57169, r57170, r57171, r57172, r57173, r57174, r57175, r57176, r57177;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57169);
        mpfr_init_set_str(r57170, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57171, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57172);
        mpfr_init(r57173);
        mpfr_init_set_str(r57174, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57175);
        mpfr_init(r57176);
        mpfr_init(r57177);
}

double f_im(double x, double y) {
        mpfr_set_d(r57169, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57172, r57170, r57171, MPFR_RNDN);
        mpfr_sub(r57173, r57169, r57172, MPFR_RNDN);
        ;
        mpfr_mul(r57175, r57173, r57174, MPFR_RNDN);
        mpfr_set_d(r57176, y, MPFR_RNDN);
        mpfr_mul(r57177, r57175, r57176, MPFR_RNDN);
        return mpfr_get_d(r57177, MPFR_RNDN);
}

static mpfr_t r57178, r57179, r57180, r57181, r57182, r57183, r57184, r57185, r57186;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57178);
        mpfr_init_set_str(r57179, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57180, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57181);
        mpfr_init(r57182);
        mpfr_init_set_str(r57183, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57184);
        mpfr_init(r57185);
        mpfr_init(r57186);
}

double f_fm(double x, double y) {
        mpfr_set_d(r57178, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57181, r57179, r57180, MPFR_RNDN);
        mpfr_sub(r57182, r57178, r57181, MPFR_RNDN);
        ;
        mpfr_set_d(r57184, y, MPFR_RNDN);
        mpfr_mul(r57185, r57183, r57184, MPFR_RNDN);
        mpfr_mul(r57186, r57182, r57185, MPFR_RNDN);
        return mpfr_get_d(r57186, MPFR_RNDN);
}

static mpfr_t r57187, r57188, r57189, r57190, r57191, r57192, r57193, r57194, r57195;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57187);
        mpfr_init_set_str(r57188, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57189, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57190);
        mpfr_init(r57191);
        mpfr_init_set_str(r57192, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57193);
        mpfr_init(r57194);
        mpfr_init(r57195);
}

double f_dm(double x, double y) {
        mpfr_set_d(r57187, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57190, r57188, r57189, MPFR_RNDN);
        mpfr_sub(r57191, r57187, r57190, MPFR_RNDN);
        ;
        mpfr_set_d(r57193, y, MPFR_RNDN);
        mpfr_mul(r57194, r57192, r57193, MPFR_RNDN);
        mpfr_mul(r57195, r57191, r57194, MPFR_RNDN);
        return mpfr_get_d(r57195, MPFR_RNDN);
}

