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

char *name = "Bearing on a great circle";

double f_if(float lambda1, float lambda2, float phi1, float phi2) {
        float r9956 = lambda1;
        float r9957 = lambda2;
        float r9958 = r9956 - r9957;
        float r9959 = sin(r9958);
        float r9960 = phi2;
        float r9961 = cos(r9960);
        float r9962 = r9959 * r9961;
        float r9963 = phi1;
        float r9964 = cos(r9963);
        float r9965 = sin(r9960);
        float r9966 = r9964 * r9965;
        float r9967 = sin(r9963);
        float r9968 = r9967 * r9961;
        float r9969 = cos(r9958);
        float r9970 = r9968 * r9969;
        float r9971 = r9966 - r9970;
        float r9972 = atan2(r9962, r9971);
        return r9972;
}

double f_id(double lambda1, double lambda2, double phi1, double phi2) {
        double r9973 = lambda1;
        double r9974 = lambda2;
        double r9975 = r9973 - r9974;
        double r9976 = sin(r9975);
        double r9977 = phi2;
        double r9978 = cos(r9977);
        double r9979 = r9976 * r9978;
        double r9980 = phi1;
        double r9981 = cos(r9980);
        double r9982 = sin(r9977);
        double r9983 = r9981 * r9982;
        double r9984 = sin(r9980);
        double r9985 = r9984 * r9978;
        double r9986 = cos(r9975);
        double r9987 = r9985 * r9986;
        double r9988 = r9983 - r9987;
        double r9989 = atan2(r9979, r9988);
        return r9989;
}


double f_of(float lambda1, float lambda2, float phi1, float phi2) {
        float r9990 = phi2;
        float r9991 = cos(r9990);
        float r9992 = lambda2;
        float r9993 = -r9992;
        float r9994 = sin(r9993);
        float r9995 = lambda1;
        float r9996 = cos(r9995);
        float r9997 = r9994 * r9996;
        float r9998 = cos(r9992);
        float r9999 = sin(r9995);
        float r10000 = r9998 * r9999;
        float r10001 = r9997 + r10000;
        float r10002 = r9991 * r10001;
        float r10003 = sin(r9990);
        float r10004 = phi1;
        float r10005 = cos(r10004);
        float r10006 = r10003 * r10005;
        float r10007 = sin(r10004);
        float r10008 = r9991 * r10007;
        float r10009 = r9998 * r9996;
        float r10010 = r9999 * r9994;
        float r10011 = r10009 - r10010;
        float r10012 = r10008 * r10011;
        float r10013 = r10006 - r10012;
        float r10014 = atan2(r10002, r10013);
        return r10014;
}

double f_od(double lambda1, double lambda2, double phi1, double phi2) {
        double r10015 = phi2;
        double r10016 = cos(r10015);
        double r10017 = lambda2;
        double r10018 = -r10017;
        double r10019 = sin(r10018);
        double r10020 = lambda1;
        double r10021 = cos(r10020);
        double r10022 = r10019 * r10021;
        double r10023 = cos(r10017);
        double r10024 = sin(r10020);
        double r10025 = r10023 * r10024;
        double r10026 = r10022 + r10025;
        double r10027 = r10016 * r10026;
        double r10028 = sin(r10015);
        double r10029 = phi1;
        double r10030 = cos(r10029);
        double r10031 = r10028 * r10030;
        double r10032 = sin(r10029);
        double r10033 = r10016 * r10032;
        double r10034 = r10023 * r10021;
        double r10035 = r10024 * r10019;
        double r10036 = r10034 - r10035;
        double r10037 = r10033 * r10036;
        double r10038 = r10031 - r10037;
        double r10039 = atan2(r10027, r10038);
        return r10039;
}

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 r10040, r10041, r10042, r10043, r10044, r10045, r10046, r10047, r10048, r10049, r10050, r10051, r10052, r10053, r10054, r10055, r10056;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10040);
        mpfr_init(r10041);
        mpfr_init(r10042);
        mpfr_init(r10043);
        mpfr_init(r10044);
        mpfr_init(r10045);
        mpfr_init(r10046);
        mpfr_init(r10047);
        mpfr_init(r10048);
        mpfr_init(r10049);
        mpfr_init(r10050);
        mpfr_init(r10051);
        mpfr_init(r10052);
        mpfr_init(r10053);
        mpfr_init(r10054);
        mpfr_init(r10055);
        mpfr_init(r10056);
}

double f_im(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r10040, lambda1, MPFR_RNDN);
        mpfr_set_d(r10041, lambda2, MPFR_RNDN);
        mpfr_sub(r10042, r10040, r10041, MPFR_RNDN);
        mpfr_sin(r10043, r10042, MPFR_RNDN);
        mpfr_set_d(r10044, phi2, MPFR_RNDN);
        mpfr_cos(r10045, r10044, MPFR_RNDN);
        mpfr_mul(r10046, r10043, r10045, MPFR_RNDN);
        mpfr_set_d(r10047, phi1, MPFR_RNDN);
        mpfr_cos(r10048, r10047, MPFR_RNDN);
        mpfr_sin(r10049, r10044, MPFR_RNDN);
        mpfr_mul(r10050, r10048, r10049, MPFR_RNDN);
        mpfr_sin(r10051, r10047, MPFR_RNDN);
        mpfr_mul(r10052, r10051, r10045, MPFR_RNDN);
        mpfr_cos(r10053, r10042, MPFR_RNDN);
        mpfr_mul(r10054, r10052, r10053, MPFR_RNDN);
        mpfr_sub(r10055, r10050, r10054, MPFR_RNDN);
        mpfr_atan2(r10056, r10046, r10055, MPFR_RNDN);
        return mpfr_get_d(r10056, MPFR_RNDN);
}

static mpfr_t r10057, r10058, r10059, r10060, r10061, r10062, r10063, r10064, r10065, r10066, r10067, r10068, r10069, r10070, r10071, r10072, r10073, r10074, r10075, r10076, r10077, r10078, r10079, r10080, r10081;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10057);
        mpfr_init(r10058);
        mpfr_init(r10059);
        mpfr_init(r10060);
        mpfr_init(r10061);
        mpfr_init(r10062);
        mpfr_init(r10063);
        mpfr_init(r10064);
        mpfr_init(r10065);
        mpfr_init(r10066);
        mpfr_init(r10067);
        mpfr_init(r10068);
        mpfr_init(r10069);
        mpfr_init(r10070);
        mpfr_init(r10071);
        mpfr_init(r10072);
        mpfr_init(r10073);
        mpfr_init(r10074);
        mpfr_init(r10075);
        mpfr_init(r10076);
        mpfr_init(r10077);
        mpfr_init(r10078);
        mpfr_init(r10079);
        mpfr_init(r10080);
        mpfr_init(r10081);
}

double f_fm(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r10057, phi2, MPFR_RNDN);
        mpfr_cos(r10058, r10057, MPFR_RNDN);
        mpfr_set_d(r10059, lambda2, MPFR_RNDN);
        mpfr_neg(r10060, r10059, MPFR_RNDN);
        mpfr_sin(r10061, r10060, MPFR_RNDN);
        mpfr_set_d(r10062, lambda1, MPFR_RNDN);
        mpfr_cos(r10063, r10062, MPFR_RNDN);
        mpfr_mul(r10064, r10061, r10063, MPFR_RNDN);
        mpfr_cos(r10065, r10059, MPFR_RNDN);
        mpfr_sin(r10066, r10062, MPFR_RNDN);
        mpfr_mul(r10067, r10065, r10066, MPFR_RNDN);
        mpfr_add(r10068, r10064, r10067, MPFR_RNDN);
        mpfr_mul(r10069, r10058, r10068, MPFR_RNDN);
        mpfr_sin(r10070, r10057, MPFR_RNDN);
        mpfr_set_d(r10071, phi1, MPFR_RNDN);
        mpfr_cos(r10072, r10071, MPFR_RNDN);
        mpfr_mul(r10073, r10070, r10072, MPFR_RNDN);
        mpfr_sin(r10074, r10071, MPFR_RNDN);
        mpfr_mul(r10075, r10058, r10074, MPFR_RNDN);
        mpfr_mul(r10076, r10065, r10063, MPFR_RNDN);
        mpfr_mul(r10077, r10066, r10061, MPFR_RNDN);
        mpfr_sub(r10078, r10076, r10077, MPFR_RNDN);
        mpfr_mul(r10079, r10075, r10078, MPFR_RNDN);
        mpfr_sub(r10080, r10073, r10079, MPFR_RNDN);
        mpfr_atan2(r10081, r10069, r10080, MPFR_RNDN);
        return mpfr_get_d(r10081, MPFR_RNDN);
}

static mpfr_t r10082, r10083, r10084, r10085, r10086, r10087, r10088, r10089, r10090, r10091, r10092, r10093, r10094, r10095, r10096, r10097, r10098, r10099, r10100, r10101, r10102, r10103, r10104, r10105, r10106;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10082);
        mpfr_init(r10083);
        mpfr_init(r10084);
        mpfr_init(r10085);
        mpfr_init(r10086);
        mpfr_init(r10087);
        mpfr_init(r10088);
        mpfr_init(r10089);
        mpfr_init(r10090);
        mpfr_init(r10091);
        mpfr_init(r10092);
        mpfr_init(r10093);
        mpfr_init(r10094);
        mpfr_init(r10095);
        mpfr_init(r10096);
        mpfr_init(r10097);
        mpfr_init(r10098);
        mpfr_init(r10099);
        mpfr_init(r10100);
        mpfr_init(r10101);
        mpfr_init(r10102);
        mpfr_init(r10103);
        mpfr_init(r10104);
        mpfr_init(r10105);
        mpfr_init(r10106);
}

double f_dm(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r10082, phi2, MPFR_RNDN);
        mpfr_cos(r10083, r10082, MPFR_RNDN);
        mpfr_set_d(r10084, lambda2, MPFR_RNDN);
        mpfr_neg(r10085, r10084, MPFR_RNDN);
        mpfr_sin(r10086, r10085, MPFR_RNDN);
        mpfr_set_d(r10087, lambda1, MPFR_RNDN);
        mpfr_cos(r10088, r10087, MPFR_RNDN);
        mpfr_mul(r10089, r10086, r10088, MPFR_RNDN);
        mpfr_cos(r10090, r10084, MPFR_RNDN);
        mpfr_sin(r10091, r10087, MPFR_RNDN);
        mpfr_mul(r10092, r10090, r10091, MPFR_RNDN);
        mpfr_add(r10093, r10089, r10092, MPFR_RNDN);
        mpfr_mul(r10094, r10083, r10093, MPFR_RNDN);
        mpfr_sin(r10095, r10082, MPFR_RNDN);
        mpfr_set_d(r10096, phi1, MPFR_RNDN);
        mpfr_cos(r10097, r10096, MPFR_RNDN);
        mpfr_mul(r10098, r10095, r10097, MPFR_RNDN);
        mpfr_sin(r10099, r10096, MPFR_RNDN);
        mpfr_mul(r10100, r10083, r10099, MPFR_RNDN);
        mpfr_mul(r10101, r10090, r10088, MPFR_RNDN);
        mpfr_mul(r10102, r10091, r10086, MPFR_RNDN);
        mpfr_sub(r10103, r10101, r10102, MPFR_RNDN);
        mpfr_mul(r10104, r10100, r10103, MPFR_RNDN);
        mpfr_sub(r10105, r10098, r10104, MPFR_RNDN);
        mpfr_atan2(r10106, r10094, r10105, MPFR_RNDN);
        return mpfr_get_d(r10106, MPFR_RNDN);
}

