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

char *name = "Spherical law of cosines";

double f_if(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r8242 = phi1;
        float r8243 = sin(r8242);
        float r8244 = phi2;
        float r8245 = sin(r8244);
        float r8246 = r8243 * r8245;
        float r8247 = cos(r8242);
        float r8248 = cos(r8244);
        float r8249 = r8247 * r8248;
        float r8250 = lambda1;
        float r8251 = lambda2;
        float r8252 = r8250 - r8251;
        float r8253 = cos(r8252);
        float r8254 = r8249 * r8253;
        float r8255 = r8246 + r8254;
        float r8256 = acos(r8255);
        float r8257 = R;
        float r8258 = r8256 * r8257;
        return r8258;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r8259 = phi1;
        double r8260 = sin(r8259);
        double r8261 = phi2;
        double r8262 = sin(r8261);
        double r8263 = r8260 * r8262;
        double r8264 = cos(r8259);
        double r8265 = cos(r8261);
        double r8266 = r8264 * r8265;
        double r8267 = lambda1;
        double r8268 = lambda2;
        double r8269 = r8267 - r8268;
        double r8270 = cos(r8269);
        double r8271 = r8266 * r8270;
        double r8272 = r8263 + r8271;
        double r8273 = acos(r8272);
        double r8274 = R;
        double r8275 = r8273 * r8274;
        return r8275;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r8276 = phi2;
        float r8277 = sin(r8276);
        float r8278 = phi1;
        float r8279 = sin(r8278);
        float r8280 = r8277 * r8279;
        float r8281 = lambda2;
        float r8282 = sin(r8281);
        float r8283 = lambda1;
        float r8284 = sin(r8283);
        float r8285 = r8282 * r8284;
        float r8286 = cos(r8283);
        float r8287 = cos(r8281);
        float r8288 = r8286 * r8287;
        float r8289 = r8285 + r8288;
        float r8290 = cos(r8278);
        float r8291 = cos(r8276);
        float r8292 = r8290 * r8291;
        float r8293 = r8289 * r8292;
        float r8294 = r8280 + r8293;
        float r8295 = acos(r8294);
        float r8296 = log(r8295);
        float r8297 = exp(r8296);
        float r8298 = exp(r8297);
        float r8299 = log(r8298);
        float r8300 = R;
        float r8301 = r8299 * r8300;
        return r8301;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r8302 = phi2;
        double r8303 = sin(r8302);
        double r8304 = phi1;
        double r8305 = sin(r8304);
        double r8306 = r8303 * r8305;
        double r8307 = lambda2;
        double r8308 = sin(r8307);
        double r8309 = lambda1;
        double r8310 = sin(r8309);
        double r8311 = r8308 * r8310;
        double r8312 = cos(r8309);
        double r8313 = cos(r8307);
        double r8314 = r8312 * r8313;
        double r8315 = r8311 + r8314;
        double r8316 = cos(r8304);
        double r8317 = cos(r8302);
        double r8318 = r8316 * r8317;
        double r8319 = r8315 * r8318;
        double r8320 = r8306 + r8319;
        double r8321 = acos(r8320);
        double r8322 = log(r8321);
        double r8323 = exp(r8322);
        double r8324 = exp(r8323);
        double r8325 = log(r8324);
        double r8326 = R;
        double r8327 = r8325 * r8326;
        return r8327;
}

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 r8328, r8329, r8330, r8331, r8332, r8333, r8334, r8335, r8336, r8337, r8338, r8339, r8340, r8341, r8342, r8343, r8344;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2128);
        mpfr_init(r8328);
        mpfr_init(r8329);
        mpfr_init(r8330);
        mpfr_init(r8331);
        mpfr_init(r8332);
        mpfr_init(r8333);
        mpfr_init(r8334);
        mpfr_init(r8335);
        mpfr_init(r8336);
        mpfr_init(r8337);
        mpfr_init(r8338);
        mpfr_init(r8339);
        mpfr_init(r8340);
        mpfr_init(r8341);
        mpfr_init(r8342);
        mpfr_init(r8343);
        mpfr_init(r8344);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r8328, phi1, MPFR_RNDN);
        mpfr_sin(r8329, r8328, MPFR_RNDN);
        mpfr_set_d(r8330, phi2, MPFR_RNDN);
        mpfr_sin(r8331, r8330, MPFR_RNDN);
        mpfr_mul(r8332, r8329, r8331, MPFR_RNDN);
        mpfr_cos(r8333, r8328, MPFR_RNDN);
        mpfr_cos(r8334, r8330, MPFR_RNDN);
        mpfr_mul(r8335, r8333, r8334, MPFR_RNDN);
        mpfr_set_d(r8336, lambda1, MPFR_RNDN);
        mpfr_set_d(r8337, lambda2, MPFR_RNDN);
        mpfr_sub(r8338, r8336, r8337, MPFR_RNDN);
        mpfr_cos(r8339, r8338, MPFR_RNDN);
        mpfr_mul(r8340, r8335, r8339, MPFR_RNDN);
        mpfr_add(r8341, r8332, r8340, MPFR_RNDN);
        mpfr_acos(r8342, r8341, MPFR_RNDN);
        mpfr_set_d(r8343, R, MPFR_RNDN);
        mpfr_mul(r8344, r8342, r8343, MPFR_RNDN);
        return mpfr_get_d(r8344, MPFR_RNDN);
}

static mpfr_t r8345, r8346, r8347, r8348, r8349, r8350, r8351, r8352, r8353, r8354, r8355, r8356, r8357, r8358, r8359, r8360, r8361, r8362, r8363, r8364, r8365, r8366, r8367, r8368, r8369, r8370;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r8345);
        mpfr_init(r8346);
        mpfr_init(r8347);
        mpfr_init(r8348);
        mpfr_init(r8349);
        mpfr_init(r8350);
        mpfr_init(r8351);
        mpfr_init(r8352);
        mpfr_init(r8353);
        mpfr_init(r8354);
        mpfr_init(r8355);
        mpfr_init(r8356);
        mpfr_init(r8357);
        mpfr_init(r8358);
        mpfr_init(r8359);
        mpfr_init(r8360);
        mpfr_init(r8361);
        mpfr_init(r8362);
        mpfr_init(r8363);
        mpfr_init(r8364);
        mpfr_init(r8365);
        mpfr_init(r8366);
        mpfr_init(r8367);
        mpfr_init(r8368);
        mpfr_init(r8369);
        mpfr_init(r8370);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r8345, phi2, MPFR_RNDN);
        mpfr_sin(r8346, r8345, MPFR_RNDN);
        mpfr_set_d(r8347, phi1, MPFR_RNDN);
        mpfr_sin(r8348, r8347, MPFR_RNDN);
        mpfr_mul(r8349, r8346, r8348, MPFR_RNDN);
        mpfr_set_d(r8350, lambda2, MPFR_RNDN);
        mpfr_sin(r8351, r8350, MPFR_RNDN);
        mpfr_set_d(r8352, lambda1, MPFR_RNDN);
        mpfr_sin(r8353, r8352, MPFR_RNDN);
        mpfr_mul(r8354, r8351, r8353, MPFR_RNDN);
        mpfr_cos(r8355, r8352, MPFR_RNDN);
        mpfr_cos(r8356, r8350, MPFR_RNDN);
        mpfr_mul(r8357, r8355, r8356, MPFR_RNDN);
        mpfr_add(r8358, r8354, r8357, MPFR_RNDN);
        mpfr_cos(r8359, r8347, MPFR_RNDN);
        mpfr_cos(r8360, r8345, MPFR_RNDN);
        mpfr_mul(r8361, r8359, r8360, MPFR_RNDN);
        mpfr_mul(r8362, r8358, r8361, MPFR_RNDN);
        mpfr_add(r8363, r8349, r8362, MPFR_RNDN);
        mpfr_acos(r8364, r8363, MPFR_RNDN);
        mpfr_log(r8365, r8364, MPFR_RNDN);
        mpfr_exp(r8366, r8365, MPFR_RNDN);
        mpfr_exp(r8367, r8366, MPFR_RNDN);
        mpfr_log(r8368, r8367, MPFR_RNDN);
        mpfr_set_d(r8369, R, MPFR_RNDN);
        mpfr_mul(r8370, r8368, r8369, MPFR_RNDN);
        return mpfr_get_d(r8370, MPFR_RNDN);
}

static mpfr_t r8371, r8372, r8373, r8374, r8375, r8376, r8377, r8378, r8379, r8380, r8381, r8382, r8383, r8384, r8385, r8386, r8387, r8388, r8389, r8390, r8391, r8392, r8393, r8394, r8395, r8396;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r8371);
        mpfr_init(r8372);
        mpfr_init(r8373);
        mpfr_init(r8374);
        mpfr_init(r8375);
        mpfr_init(r8376);
        mpfr_init(r8377);
        mpfr_init(r8378);
        mpfr_init(r8379);
        mpfr_init(r8380);
        mpfr_init(r8381);
        mpfr_init(r8382);
        mpfr_init(r8383);
        mpfr_init(r8384);
        mpfr_init(r8385);
        mpfr_init(r8386);
        mpfr_init(r8387);
        mpfr_init(r8388);
        mpfr_init(r8389);
        mpfr_init(r8390);
        mpfr_init(r8391);
        mpfr_init(r8392);
        mpfr_init(r8393);
        mpfr_init(r8394);
        mpfr_init(r8395);
        mpfr_init(r8396);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r8371, phi2, MPFR_RNDN);
        mpfr_sin(r8372, r8371, MPFR_RNDN);
        mpfr_set_d(r8373, phi1, MPFR_RNDN);
        mpfr_sin(r8374, r8373, MPFR_RNDN);
        mpfr_mul(r8375, r8372, r8374, MPFR_RNDN);
        mpfr_set_d(r8376, lambda2, MPFR_RNDN);
        mpfr_sin(r8377, r8376, MPFR_RNDN);
        mpfr_set_d(r8378, lambda1, MPFR_RNDN);
        mpfr_sin(r8379, r8378, MPFR_RNDN);
        mpfr_mul(r8380, r8377, r8379, MPFR_RNDN);
        mpfr_cos(r8381, r8378, MPFR_RNDN);
        mpfr_cos(r8382, r8376, MPFR_RNDN);
        mpfr_mul(r8383, r8381, r8382, MPFR_RNDN);
        mpfr_add(r8384, r8380, r8383, MPFR_RNDN);
        mpfr_cos(r8385, r8373, MPFR_RNDN);
        mpfr_cos(r8386, r8371, MPFR_RNDN);
        mpfr_mul(r8387, r8385, r8386, MPFR_RNDN);
        mpfr_mul(r8388, r8384, r8387, MPFR_RNDN);
        mpfr_add(r8389, r8375, r8388, MPFR_RNDN);
        mpfr_acos(r8390, r8389, MPFR_RNDN);
        mpfr_log(r8391, r8390, MPFR_RNDN);
        mpfr_exp(r8392, r8391, MPFR_RNDN);
        mpfr_exp(r8393, r8392, MPFR_RNDN);
        mpfr_log(r8394, r8393, MPFR_RNDN);
        mpfr_set_d(r8395, R, MPFR_RNDN);
        mpfr_mul(r8396, r8394, r8395, MPFR_RNDN);
        return mpfr_get_d(r8396, MPFR_RNDN);
}

