//***********************************************************************
// Matlab .fis to arduino C converter v2.0.1.25122016                   
// - Karthik Nadig, USA                                                  
// Please report bugs to: [email protected]                         
//***********************************************************************
#define FIS_TYPE float
#define FIS_RESOLUSION 101
#define FIS_MIN -3.4028235E+38
#define FIS_MAX 3.4028235E+38
typedef FIS_TYPE(*_FIS_MF)(FIS_TYPE, FIS_TYPE*);
typedef FIS_TYPE(*_FIS_ARR_OP)(FIS_TYPE, FIS_TYPE);
typedef FIS_TYPE(*_FIS_ARR)(FIS_TYPE*, int, _FIS_ARR_OP);

// Number of inputs to the fuzzy inference system
const int fis_gcI = 4;
// Number of outputs to the fuzzy inference system
const int fis_gcO = 1;
// Number of rules to the fuzzy inference system
const int fis_gcR = 248;

FIS_TYPE g_fisInput[fis_gcI];
FIS_TYPE g_fisOutput[fis_gcO];

// Setup routine runs once when you press reset:
void setup()
{
    // initialize the Analog pins for input.
    // Pin mode for Input: A
    pinMode(A0 , INPUT);
    // Pin mode for Input: B
    pinMode(A1 , INPUT);
    // Pin mode for Input: AB
    pinMode(A2 , INPUT);
    // Pin mode for Input: RH
    pinMode(A3 , INPUT);

    Serial.begin(9600);

    // initialize the Analog pins for output.
    // Pin mode for Output: hasil
    pinMode(4 , OUTPUT);

}

// Loop routine runs over and over again forever:
void loop()
{
    // Read Input: A
    g_fisInput[0] = 1000;
    // Read Input: B
    g_fisInput[1] = 1000;
    // Read Input: AB
    g_fisInput[2] = 1000;
    // Read Input: RH
    g_fisInput[3] = 1000;

    g_fisOutput[0] = 0;

    fis_evaluate();

    // Set output vlaue: hasil
    analogWrite(4 , g_fisOutput[0]);

    Serial.print(g_fisOutput[0]);  
    while(1);

}

//***********************************************************************
// Support functions for Fuzzy Inference System                          
//***********************************************************************
// Triangular Member Function
FIS_TYPE fis_trimf(FIS_TYPE x, FIS_TYPE* p)
{
    FIS_TYPE a = p[0], b = p[1], c = p[2];
    FIS_TYPE t1 = (x - a) / (b - a);
    FIS_TYPE t2 = (c - x) / (c - b);
    if ((a == b) && (b == c)) return (FIS_TYPE) (x == a);
    if (a == b) return (FIS_TYPE) (t2*(b <= x)*(x <= c));
    if (b == c) return (FIS_TYPE) (t1*(a <= x)*(x <= b));
    t1 = min(t1, t2);
    return (FIS_TYPE) max(t1, 0);
}

FIS_TYPE fis_prod(FIS_TYPE a, FIS_TYPE b)
{
    return (a * b);
}

FIS_TYPE fis_probor(FIS_TYPE a, FIS_TYPE b)
{
    return (a + b - (a * b));
}

FIS_TYPE fis_sum(FIS_TYPE a, FIS_TYPE b)
{
    return (a + b);
}

FIS_TYPE fis_array_operation(FIS_TYPE *array, int size, _FIS_ARR_OP pfnOp)
{
    int i;
    FIS_TYPE ret = 0;

    if (size == 0) return ret;
    if (size == 1) return array[0];

    ret = array[0];
    for (i = 1; i < size; i++)
    {
        ret = (*pfnOp)(ret, array[i]);
    }

    return ret;
}


//***********************************************************************
// Data for Fuzzy Inference System                                       
//***********************************************************************
// Pointers to the implementations of member functions
_FIS_MF fis_gMF[] =
{
    fis_trimf
};

// Count of member function for each Input
int fis_gIMFCount[] = { 4, 4, 4, 4 };

// Count of member function for each Output 
int fis_gOMFCount[] = { 9 };

// Coefficients for the Input Member Functions
FIS_TYPE fis_gMFI0Coeff1[] = { 990, 1000, 1024 };
FIS_TYPE fis_gMFI0Coeff2[] = { 970, 980, 1000 };
FIS_TYPE fis_gMFI0Coeff3[] = { 950, 970, 980 };
FIS_TYPE fis_gMFI0Coeff4[] = { 926, 950, 960 };
FIS_TYPE* fis_gMFI0Coeff[] = { fis_gMFI0Coeff1, fis_gMFI0Coeff2, fis_gMFI0Coeff3, fis_gMFI0Coeff4 };
FIS_TYPE fis_gMFI1Coeff1[] = { 990, 1000, 1024 };
FIS_TYPE fis_gMFI1Coeff2[] = { 970, 980, 1000 };
FIS_TYPE fis_gMFI1Coeff3[] = { 950, 970, 980 };
FIS_TYPE fis_gMFI1Coeff4[] = { 926, 950, 960 };
FIS_TYPE* fis_gMFI1Coeff[] = { fis_gMFI1Coeff1, fis_gMFI1Coeff2, fis_gMFI1Coeff3, fis_gMFI1Coeff4 };
FIS_TYPE fis_gMFI2Coeff1[] = { 990, 1000, 1024 };
FIS_TYPE fis_gMFI2Coeff2[] = { 970, 980, 1000 };
FIS_TYPE fis_gMFI2Coeff3[] = { 950, 970, 980 };
FIS_TYPE fis_gMFI2Coeff4[] = { 926, 950, 960 };
FIS_TYPE* fis_gMFI2Coeff[] = { fis_gMFI2Coeff1, fis_gMFI2Coeff2, fis_gMFI2Coeff3, fis_gMFI2Coeff4 };
FIS_TYPE fis_gMFI3Coeff1[] = { 990, 1000, 1024 };
FIS_TYPE fis_gMFI3Coeff2[] = { 970, 980, 1000 };
FIS_TYPE fis_gMFI3Coeff3[] = { 950, 970, 980 };
FIS_TYPE fis_gMFI3Coeff4[] = { 926, 950, 960 };
FIS_TYPE* fis_gMFI3Coeff[] = { fis_gMFI3Coeff1, fis_gMFI3Coeff2, fis_gMFI3Coeff3, fis_gMFI3Coeff4 };
FIS_TYPE** fis_gMFICoeff[] = { fis_gMFI0Coeff, fis_gMFI1Coeff, fis_gMFI2Coeff, fis_gMFI3Coeff };

// Coefficients for the Output Member Functions
FIS_TYPE fis_gMFO0Coeff1[] = { 0, 0, 0, 0, 10 };
FIS_TYPE fis_gMFO0Coeff2[] = { 0, 0, 0, 0, 20 };
FIS_TYPE fis_gMFO0Coeff3[] = { 0, 0, 0, 0, 30 };
FIS_TYPE fis_gMFO0Coeff4[] = { 0, 0, 0, 0, 40 };
FIS_TYPE fis_gMFO0Coeff5[] = { 0, 0, 0, 0, 50 };
FIS_TYPE fis_gMFO0Coeff6[] = { 0, 0, 0, 0, 60 };
FIS_TYPE fis_gMFO0Coeff7[] = { 0, 0, 0, 0, 70 };
FIS_TYPE fis_gMFO0Coeff8[] = { 0, 0, 0, 0, 80 };
FIS_TYPE fis_gMFO0Coeff9[] = { 0, 0, 0, 0, 100 };
FIS_TYPE* fis_gMFO0Coeff[] = { fis_gMFO0Coeff1, fis_gMFO0Coeff2, fis_gMFO0Coeff3, fis_gMFO0Coeff4, fis_gMFO0Coeff5, fis_gMFO0Coeff6, fis_gMFO0Coeff7, fis_gMFO0Coeff8, fis_gMFO0Coeff9 };
FIS_TYPE** fis_gMFOCoeff[] = { fis_gMFO0Coeff };

// Input membership function set
int fis_gMFI0[] = { 0, 0, 0, 0 };
int fis_gMFI1[] = { 0, 0, 0, 0 };
int fis_gMFI2[] = { 0, 0, 0, 0 };
int fis_gMFI3[] = { 0, 0, 0, 0 };
int* fis_gMFI[] = { fis_gMFI0, fis_gMFI1, fis_gMFI2, fis_gMFI3};

// Output membership function set

int* fis_gMFO[] = {};

// Rule Weights
FIS_TYPE fis_gRWeight[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

// Rule Type
int fis_gRType[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

// Rule Inputs
int fis_gRI0[] = { 1, 1, 1, 1 };
int fis_gRI1[] = { 1, 1, 1, 2 };
int fis_gRI2[] = { 1, 1, 1, 3 };
int fis_gRI3[] = { 1, 1, 1, 4 };
int fis_gRI4[] = { 1, 1, 2, 1 };
int fis_gRI5[] = { 1, 1, 2, 2 };
int fis_gRI6[] = { 1, 1, 2, 3 };
int fis_gRI7[] = { 1, 1, 2, 4 };
int fis_gRI8[] = { 1, 1, 3, 1 };
int fis_gRI9[] = { 1, 1, 3, 2 };
int fis_gRI10[] = { 1, 1, 3, 3 };
int fis_gRI11[] = { 1, 1, 3, 4 };
int fis_gRI12[] = { 1, 1, 4, 1 };
int fis_gRI13[] = { 1, 1, 4, 2 };
int fis_gRI14[] = { 1, 1, 4, 3 };
int fis_gRI15[] = { 1, 1, 4, 4 };
int fis_gRI16[] = { 1, 2, 1, 1 };
int fis_gRI17[] = { 1, 2, 1, 2 };
int fis_gRI18[] = { 1, 2, 1, 3 };
int fis_gRI19[] = { 1, 2, 1, 4 };
int fis_gRI20[] = { 1, 2, 2, 1 };
int fis_gRI21[] = { 1, 2, 2, 2 };
int fis_gRI22[] = { 1, 2, 2, 3 };
int fis_gRI23[] = { 1, 2, 2, 4 };
int fis_gRI24[] = { 1, 2, 3, 1 };
int fis_gRI25[] = { 1, 2, 3, 2 };
int fis_gRI26[] = { 1, 2, 3, 3 };
int fis_gRI27[] = { 1, 2, 3, 4 };
int fis_gRI28[] = { 1, 2, 4, 1 };
int fis_gRI29[] = { 1, 2, 4, 2 };
int fis_gRI30[] = { 1, 2, 4, 3 };
int fis_gRI31[] = { 1, 2, 4, 4 };
int fis_gRI32[] = { 1, 3, 1, 1 };
int fis_gRI33[] = { 1, 3, 1, 2 };
int fis_gRI34[] = { 1, 3, 1, 3 };
int fis_gRI35[] = { 1, 3, 1, 4 };
int fis_gRI36[] = { 1, 3, 2, 1 };
int fis_gRI37[] = { 1, 3, 2, 2 };
int fis_gRI38[] = { 1, 3, 2, 3 };
int fis_gRI39[] = { 1, 3, 2, 4 };
int fis_gRI40[] = { 1, 3, 3, 1 };
int fis_gRI41[] = { 1, 3, 3, 2 };
int fis_gRI42[] = { 1, 3, 3, 3 };
int fis_gRI43[] = { 1, 3, 3, 4 };
int fis_gRI44[] = { 1, 3, 4, 1 };
int fis_gRI45[] = { 1, 3, 4, 2 };
int fis_gRI46[] = { 1, 3, 4, 3 };
int fis_gRI47[] = { 1, 3, 4, 4 };
int fis_gRI48[] = { 1, 4, 1, 1 };
int fis_gRI49[] = { 1, 4, 1, 2 };
int fis_gRI50[] = { 1, 4, 1, 3 };
int fis_gRI51[] = { 1, 4, 1, 4 };
int fis_gRI52[] = { 1, 4, 2, 1 };
int fis_gRI53[] = { 1, 4, 2, 2 };
int fis_gRI54[] = { 1, 4, 2, 3 };
int fis_gRI55[] = { 1, 4, 2, 4 };
int fis_gRI56[] = { 1, 4, 3, 1 };
int fis_gRI57[] = { 1, 4, 3, 2 };
int fis_gRI58[] = { 1, 4, 3, 3 };
int fis_gRI59[] = { 1, 4, 3, 4 };
int fis_gRI60[] = { 1, 4, 4, 1 };
int fis_gRI61[] = { 1, 4, 4, 2 };
int fis_gRI62[] = { 1, 4, 4, 3 };
int fis_gRI63[] = { 1, 4, 4, 4 };
int fis_gRI64[] = { 2, 1, 1, 1 };
int fis_gRI65[] = { 2, 1, 1, 2 };
int fis_gRI66[] = { 2, 1, 1, 3 };
int fis_gRI67[] = { 2, 1, 1, 4 };
int fis_gRI68[] = { 2, 1, 2, 1 };
int fis_gRI69[] = { 2, 1, 2, 2 };
int fis_gRI70[] = { 2, 1, 2, 3 };
int fis_gRI71[] = { 2, 1, 2, 4 };
int fis_gRI72[] = { 2, 1, 3, 1 };
int fis_gRI73[] = { 2, 1, 3, 2 };
int fis_gRI74[] = { 2, 1, 3, 3 };
int fis_gRI75[] = { 2, 1, 3, 4 };
int fis_gRI76[] = { 2, 1, 4, 1 };
int fis_gRI77[] = { 2, 1, 4, 2 };
int fis_gRI78[] = { 2, 1, 4, 3 };
int fis_gRI79[] = { 2, 1, 4, 4 };
int fis_gRI80[] = { 2, 2, 1, 1 };
int fis_gRI81[] = { 2, 2, 1, 2 };
int fis_gRI82[] = { 2, 2, 1, 3 };
int fis_gRI83[] = { 2, 2, 1, 4 };
int fis_gRI84[] = { 2, 2, 2, 1 };
int fis_gRI85[] = { 2, 2, 2, 2 };
int fis_gRI86[] = { 2, 2, 2, 3 };
int fis_gRI87[] = { 2, 2, 2, 4 };
int fis_gRI88[] = { 2, 2, 3, 1 };
int fis_gRI89[] = { 2, 2, 3, 2 };
int fis_gRI90[] = { 2, 2, 3, 3 };
int fis_gRI91[] = { 2, 2, 3, 4 };
int fis_gRI92[] = { 2, 2, 4, 1 };
int fis_gRI93[] = { 2, 2, 4, 2 };
int fis_gRI94[] = { 2, 2, 4, 3 };
int fis_gRI95[] = { 2, 2, 4, 4 };
int fis_gRI96[] = { 2, 3, 1, 1 };
int fis_gRI97[] = { 2, 3, 1, 2 };
int fis_gRI98[] = { 2, 3, 1, 3 };
int fis_gRI99[] = { 2, 3, 1, 4 };
int fis_gRI100[] = { 2, 3, 2, 1 };
int fis_gRI101[] = { 2, 3, 2, 2 };
int fis_gRI102[] = { 2, 3, 2, 3 };
int fis_gRI103[] = { 2, 3, 2, 4 };
int fis_gRI104[] = { 2, 3, 3, 1 };
int fis_gRI105[] = { 2, 3, 3, 2 };
int fis_gRI106[] = { 2, 3, 3, 3 };
int fis_gRI107[] = { 2, 3, 3, 4 };
int fis_gRI108[] = { 2, 3, 4, 1 };
int fis_gRI109[] = { 2, 3, 4, 2 };
int fis_gRI110[] = { 2, 3, 4, 3 };
int fis_gRI111[] = { 2, 3, 4, 4 };
int fis_gRI112[] = { 2, 4, 1, 1 };
int fis_gRI113[] = { 2, 4, 1, 2 };
int fis_gRI114[] = { 2, 4, 1, 3 };
int fis_gRI115[] = { 2, 4, 1, 4 };
int fis_gRI116[] = { 2, 4, 2, 1 };
int fis_gRI117[] = { 2, 4, 2, 2 };
int fis_gRI118[] = { 2, 4, 2, 3 };
int fis_gRI119[] = { 2, 4, 2, 4 };
int fis_gRI120[] = { 2, 4, 3, 1 };
int fis_gRI121[] = { 2, 4, 3, 2 };
int fis_gRI122[] = { 2, 4, 3, 3 };
int fis_gRI123[] = { 2, 4, 3, 4 };
int fis_gRI124[] = { 2, 4, 4, 1 };
int fis_gRI125[] = { 2, 4, 4, 2 };
int fis_gRI126[] = { 2, 4, 4, 3 };
int fis_gRI127[] = { 2, 4, 4, 4 };
int fis_gRI128[] = { 3, 1, 1, 1 };
int fis_gRI129[] = { 3, 1, 1, 2 };
int fis_gRI130[] = { 3, 1, 1, 3 };
int fis_gRI131[] = { 3, 1, 1, 4 };
int fis_gRI132[] = { 3, 1, 2, 1 };
int fis_gRI133[] = { 3, 1, 2, 2 };
int fis_gRI134[] = { 3, 1, 2, 3 };
int fis_gRI135[] = { 3, 1, 2, 4 };
int fis_gRI136[] = { 3, 1, 3, 1 };
int fis_gRI137[] = { 3, 1, 3, 2 };
int fis_gRI138[] = { 3, 1, 3, 3 };
int fis_gRI139[] = { 3, 1, 3, 4 };
int fis_gRI140[] = { 3, 1, 4, 1 };
int fis_gRI141[] = { 3, 1, 4, 2 };
int fis_gRI142[] = { 3, 1, 4, 3 };
int fis_gRI143[] = { 3, 1, 4, 4 };
int fis_gRI144[] = { 3, 2, 1, 1 };
int fis_gRI145[] = { 3, 2, 1, 2 };
int fis_gRI146[] = { 3, 2, 1, 3 };
int fis_gRI147[] = { 3, 2, 1, 4 };
int fis_gRI148[] = { 3, 2, 2, 1 };
int fis_gRI149[] = { 3, 2, 2, 2 };
int fis_gRI150[] = { 3, 2, 2, 3 };
int fis_gRI151[] = { 3, 2, 2, 4 };
int fis_gRI152[] = { 3, 2, 3, 1 };
int fis_gRI153[] = { 3, 2, 3, 2 };
int fis_gRI154[] = { 3, 2, 3, 3 };
int fis_gRI155[] = { 3, 2, 3, 4 };
int fis_gRI156[] = { 3, 2, 4, 1 };
int fis_gRI157[] = { 3, 2, 4, 2 };
int fis_gRI158[] = { 3, 2, 4, 3 };
int fis_gRI159[] = { 3, 2, 4, 4 };
int fis_gRI160[] = { 3, 3, 1, 1 };
int fis_gRI161[] = { 3, 3, 1, 2 };
int fis_gRI162[] = { 3, 3, 1, 3 };
int fis_gRI163[] = { 3, 3, 1, 4 };
int fis_gRI164[] = { 3, 3, 3, 1 };
int fis_gRI165[] = { 3, 3, 3, 2 };
int fis_gRI166[] = { 3, 3, 3, 3 };
int fis_gRI167[] = { 3, 3, 3, 4 };
int fis_gRI168[] = { 3, 3, 4, 1 };
int fis_gRI169[] = { 3, 3, 4, 2 };
int fis_gRI170[] = { 3, 3, 4, 3 };
int fis_gRI171[] = { 3, 3, 4, 4 };
int fis_gRI172[] = { 3, 4, 1, 1 };
int fis_gRI173[] = { 3, 4, 1, 2 };
int fis_gRI174[] = { 3, 4, 1, 3 };
int fis_gRI175[] = { 3, 4, 1, 4 };
int fis_gRI176[] = { 3, 4, 2, 1 };
int fis_gRI177[] = { 3, 4, 2, 2 };
int fis_gRI178[] = { 3, 4, 2, 3 };
int fis_gRI179[] = { 3, 4, 2, 4 };
int fis_gRI180[] = { 3, 4, 3, 1 };
int fis_gRI181[] = { 3, 4, 3, 2 };
int fis_gRI182[] = { 3, 4, 3, 3 };
int fis_gRI183[] = { 3, 4, 3, 4 };
int fis_gRI184[] = { 3, 4, 4, 1 };
int fis_gRI185[] = { 3, 4, 4, 2 };
int fis_gRI186[] = { 3, 4, 4, 3 };
int fis_gRI187[] = { 3, 4, 4, 4 };
int fis_gRI188[] = { 4, 1, 1, 1 };
int fis_gRI189[] = { 4, 1, 1, 2 };
int fis_gRI190[] = { 4, 1, 1, 3 };
int fis_gRI191[] = { 4, 1, 1, 4 };
int fis_gRI192[] = { 4, 1, 2, 1 };
int fis_gRI193[] = { 4, 1, 2, 2 };
int fis_gRI194[] = { 4, 1, 2, 3 };
int fis_gRI195[] = { 4, 1, 2, 4 };
int fis_gRI196[] = { 4, 1, 3, 1 };
int fis_gRI197[] = { 4, 1, 3, 2 };
int fis_gRI198[] = { 4, 1, 3, 3 };
int fis_gRI199[] = { 4, 1, 3, 4 };
int fis_gRI200[] = { 4, 1, 4, 1 };
int fis_gRI201[] = { 4, 1, 4, 2 };
int fis_gRI202[] = { 4, 1, 4, 3 };
int fis_gRI203[] = { 4, 2, 1, 1 };
int fis_gRI204[] = { 4, 2, 1, 2 };
int fis_gRI205[] = { 4, 2, 1, 3 };
int fis_gRI206[] = { 4, 2, 1, 4 };
int fis_gRI207[] = { 4, 2, 2, 1 };
int fis_gRI208[] = { 4, 2, 2, 2 };
int fis_gRI209[] = { 4, 2, 2, 3 };
int fis_gRI210[] = { 4, 2, 2, 4 };
int fis_gRI211[] = { 4, 2, 3, 1 };
int fis_gRI212[] = { 4, 2, 3, 2 };
int fis_gRI213[] = { 4, 2, 3, 3 };
int fis_gRI214[] = { 4, 2, 3, 4 };
int fis_gRI215[] = { 4, 2, 4, 1 };
int fis_gRI216[] = { 4, 2, 4, 2 };
int fis_gRI217[] = { 4, 2, 4, 3 };
int fis_gRI218[] = { 4, 2, 4, 4 };
int fis_gRI219[] = { 4, 3, 1, 1 };
int fis_gRI220[] = { 4, 3, 1, 2 };
int fis_gRI221[] = { 4, 3, 1, 3 };
int fis_gRI222[] = { 4, 3, 1, 4 };
int fis_gRI223[] = { 4, 3, 2, 1 };
int fis_gRI224[] = { 4, 3, 2, 2 };
int fis_gRI225[] = { 4, 3, 2, 3 };
int fis_gRI226[] = { 4, 3, 2, 4 };
int fis_gRI227[] = { 4, 3, 3, 1 };
int fis_gRI228[] = { 4, 3, 3, 2 };
int fis_gRI229[] = { 4, 3, 3, 3 };
int fis_gRI230[] = { 4, 3, 3, 4 };
int fis_gRI231[] = { 4, 3, 4, 1 };
int fis_gRI232[] = { 4, 3, 4, 2 };
int fis_gRI233[] = { 4, 3, 4, 3 };
int fis_gRI234[] = { 4, 3, 4, 4 };
int fis_gRI235[] = { 4, 4, 2, 1 };
int fis_gRI236[] = { 4, 4, 2, 2 };
int fis_gRI237[] = { 4, 4, 2, 3 };
int fis_gRI238[] = { 4, 4, 2, 4 };
int fis_gRI239[] = { 4, 4, 3, 1 };
int fis_gRI240[] = { 4, 4, 3, 2 };
int fis_gRI241[] = { 4, 4, 3, 3 };
int fis_gRI242[] = { 4, 4, 3, 4 };
int fis_gRI243[] = { 4, 4, 4, 1 };
int fis_gRI244[] = { 4, 4, 4, 2 };
int fis_gRI245[] = { 4, 4, 4, 3 };
int fis_gRI246[] = { 4, 4, 4, 4 };
int fis_gRI247[] = { 4, 1, 4, 4 };
int* fis_gRI[] = { fis_gRI0, fis_gRI1, fis_gRI2, fis_gRI3, fis_gRI4, fis_gRI5, fis_gRI6, fis_gRI7, fis_gRI8, fis_gRI9, fis_gRI10, fis_gRI11, fis_gRI12, fis_gRI13, fis_gRI14, fis_gRI15, fis_gRI16, fis_gRI17, fis_gRI18, fis_gRI19, fis_gRI20, fis_gRI21, fis_gRI22, fis_gRI23, fis_gRI24, fis_gRI25, fis_gRI26, fis_gRI27, fis_gRI28, fis_gRI29, fis_gRI30, fis_gRI31, fis_gRI32, fis_gRI33, fis_gRI34, fis_gRI35, fis_gRI36, fis_gRI37, fis_gRI38, fis_gRI39, fis_gRI40, fis_gRI41, fis_gRI42, fis_gRI43, fis_gRI44, fis_gRI45, fis_gRI46, fis_gRI47, fis_gRI48, fis_gRI49, fis_gRI50, fis_gRI51, fis_gRI52, fis_gRI53, fis_gRI54, fis_gRI55, fis_gRI56, fis_gRI57, fis_gRI58, fis_gRI59, fis_gRI60, fis_gRI61, fis_gRI62, fis_gRI63, fis_gRI64, fis_gRI65, fis_gRI66, fis_gRI67, fis_gRI68, fis_gRI69, fis_gRI70, fis_gRI71, fis_gRI72, fis_gRI73, fis_gRI74, fis_gRI75, fis_gRI76, fis_gRI77, fis_gRI78, fis_gRI79, fis_gRI80, fis_gRI81, fis_gRI82, fis_gRI83, fis_gRI84, fis_gRI85, fis_gRI86, fis_gRI87, fis_gRI88, fis_gRI89, fis_gRI90, fis_gRI91, fis_gRI92, fis_gRI93, fis_gRI94, fis_gRI95, fis_gRI96, fis_gRI97, fis_gRI98, fis_gRI99, fis_gRI100, fis_gRI101, fis_gRI102, fis_gRI103, fis_gRI104, fis_gRI105, fis_gRI106, fis_gRI107, fis_gRI108, fis_gRI109, fis_gRI110, fis_gRI111, fis_gRI112, fis_gRI113, fis_gRI114, fis_gRI115, fis_gRI116, fis_gRI117, fis_gRI118, fis_gRI119, fis_gRI120, fis_gRI121, fis_gRI122, fis_gRI123, fis_gRI124, fis_gRI125, fis_gRI126, fis_gRI127, fis_gRI128, fis_gRI129, fis_gRI130, fis_gRI131, fis_gRI132, fis_gRI133, fis_gRI134, fis_gRI135, fis_gRI136, fis_gRI137, fis_gRI138, fis_gRI139, fis_gRI140, fis_gRI141, fis_gRI142, fis_gRI143, fis_gRI144, fis_gRI145, fis_gRI146, fis_gRI147, fis_gRI148, fis_gRI149, fis_gRI150, fis_gRI151, fis_gRI152, fis_gRI153, fis_gRI154, fis_gRI155, fis_gRI156, fis_gRI157, fis_gRI158, fis_gRI159, fis_gRI160, fis_gRI161, fis_gRI162, fis_gRI163, fis_gRI164, fis_gRI165, fis_gRI166, fis_gRI167, fis_gRI168, fis_gRI169, fis_gRI170, fis_gRI171, fis_gRI172, fis_gRI173, fis_gRI174, fis_gRI175, fis_gRI176, fis_gRI177, fis_gRI178, fis_gRI179, fis_gRI180, fis_gRI181, fis_gRI182, fis_gRI183, fis_gRI184, fis_gRI185, fis_gRI186, fis_gRI187, fis_gRI188, fis_gRI189, fis_gRI190, fis_gRI191, fis_gRI192, fis_gRI193, fis_gRI194, fis_gRI195, fis_gRI196, fis_gRI197, fis_gRI198, fis_gRI199, fis_gRI200, fis_gRI201, fis_gRI202, fis_gRI203, fis_gRI204, fis_gRI205, fis_gRI206, fis_gRI207, fis_gRI208, fis_gRI209, fis_gRI210, fis_gRI211, fis_gRI212, fis_gRI213, fis_gRI214, fis_gRI215, fis_gRI216, fis_gRI217, fis_gRI218, fis_gRI219, fis_gRI220, fis_gRI221, fis_gRI222, fis_gRI223, fis_gRI224, fis_gRI225, fis_gRI226, fis_gRI227, fis_gRI228, fis_gRI229, fis_gRI230, fis_gRI231, fis_gRI232, fis_gRI233, fis_gRI234, fis_gRI235, fis_gRI236, fis_gRI237, fis_gRI238, fis_gRI239, fis_gRI240, fis_gRI241, fis_gRI242, fis_gRI243, fis_gRI244, fis_gRI245, fis_gRI246, fis_gRI247 };

// Rule Outputs
int fis_gRO0[] = { 8 };
int fis_gRO1[] = { 8 };
int fis_gRO2[] = { 4 };
int fis_gRO3[] = { 4 };
int fis_gRO4[] = { 8 };
int fis_gRO5[] = { 8 };
int fis_gRO6[] = { 4 };
int fis_gRO7[] = { 4 };
int fis_gRO8[] = { 7 };
int fis_gRO9[] = { 7 };
int fis_gRO10[] = { 3 };
int fis_gRO11[] = { 3 };
int fis_gRO12[] = { 7 };
int fis_gRO13[] = { 7 };
int fis_gRO14[] = { 3 };
int fis_gRO15[] = { 3 };
int fis_gRO16[] = { 8 };
int fis_gRO17[] = { 8 };
int fis_gRO18[] = { 4 };
int fis_gRO19[] = { 4 };
int fis_gRO20[] = { 8 };
int fis_gRO21[] = { 8 };
int fis_gRO22[] = { 4 };
int fis_gRO23[] = { 4 };
int fis_gRO24[] = { 7 };
int fis_gRO25[] = { 7 };
int fis_gRO26[] = { 3 };
int fis_gRO27[] = { 3 };
int fis_gRO28[] = { 7 };
int fis_gRO29[] = { 7 };
int fis_gRO30[] = { 3 };
int fis_gRO31[] = { 3 };
int fis_gRO32[] = { 6 };
int fis_gRO33[] = { 6 };
int fis_gRO34[] = { 2 };
int fis_gRO35[] = { 2 };
int fis_gRO36[] = { 6 };
int fis_gRO37[] = { 6 };
int fis_gRO38[] = { 2 };
int fis_gRO39[] = { 2 };
int fis_gRO40[] = { 6 };
int fis_gRO41[] = { 6 };
int fis_gRO42[] = { 2 };
int fis_gRO43[] = { 2 };
int fis_gRO44[] = { 6 };
int fis_gRO45[] = { 6 };
int fis_gRO46[] = { 2 };
int fis_gRO47[] = { 2 };
int fis_gRO48[] = { 6 };
int fis_gRO49[] = { 6 };
int fis_gRO50[] = { 2 };
int fis_gRO51[] = { 2 };
int fis_gRO52[] = { 6 };
int fis_gRO53[] = { 6 };
int fis_gRO54[] = { 2 };
int fis_gRO55[] = { 2 };
int fis_gRO56[] = { 6 };
int fis_gRO57[] = { 6 };
int fis_gRO58[] = { 2 };
int fis_gRO59[] = { 2 };
int fis_gRO60[] = { 6 };
int fis_gRO61[] = { 6 };
int fis_gRO62[] = { 2 };
int fis_gRO63[] = { 2 };
int fis_gRO64[] = { 8 };
int fis_gRO65[] = { 8 };
int fis_gRO66[] = { 4 };
int fis_gRO67[] = { 4 };
int fis_gRO68[] = { 8 };
int fis_gRO69[] = { 8 };
int fis_gRO70[] = { 4 };
int fis_gRO71[] = { 4 };
int fis_gRO72[] = { 7 };
int fis_gRO73[] = { 7 };
int fis_gRO74[] = { 3 };
int fis_gRO75[] = { 3 };
int fis_gRO76[] = { 7 };
int fis_gRO77[] = { 7 };
int fis_gRO78[] = { 3 };
int fis_gRO79[] = { 3 };
int fis_gRO80[] = { 8 };
int fis_gRO81[] = { 8 };
int fis_gRO82[] = { 4 };
int fis_gRO83[] = { 4 };
int fis_gRO84[] = { 8 };
int fis_gRO85[] = { 8 };
int fis_gRO86[] = { 4 };
int fis_gRO87[] = { 4 };
int fis_gRO88[] = { 7 };
int fis_gRO89[] = { 7 };
int fis_gRO90[] = { 3 };
int fis_gRO91[] = { 3 };
int fis_gRO92[] = { 7 };
int fis_gRO93[] = { 7 };
int fis_gRO94[] = { 3 };
int fis_gRO95[] = { 3 };
int fis_gRO96[] = { 6 };
int fis_gRO97[] = { 6 };
int fis_gRO98[] = { 2 };
int fis_gRO99[] = { 2 };
int fis_gRO100[] = { 6 };
int fis_gRO101[] = { 6 };
int fis_gRO102[] = { 2 };
int fis_gRO103[] = { 2 };
int fis_gRO104[] = { 6 };
int fis_gRO105[] = { 6 };
int fis_gRO106[] = { 2 };
int fis_gRO107[] = { 2 };
int fis_gRO108[] = { 6 };
int fis_gRO109[] = { 6 };
int fis_gRO110[] = { 2 };
int fis_gRO111[] = { 2 };
int fis_gRO112[] = { 6 };
int fis_gRO113[] = { 6 };
int fis_gRO114[] = { 2 };
int fis_gRO115[] = { 2 };
int fis_gRO116[] = { 6 };
int fis_gRO117[] = { 6 };
int fis_gRO118[] = { 2 };
int fis_gRO119[] = { 2 };
int fis_gRO120[] = { 6 };
int fis_gRO121[] = { 6 };
int fis_gRO122[] = { 2 };
int fis_gRO123[] = { 2 };
int fis_gRO124[] = { 6 };
int fis_gRO125[] = { 6 };
int fis_gRO126[] = { 2 };
int fis_gRO127[] = { 2 };
int fis_gRO128[] = { 5 };
int fis_gRO129[] = { 5 };
int fis_gRO130[] = { 1 };
int fis_gRO131[] = { 1 };
int fis_gRO132[] = { 5 };
int fis_gRO133[] = { 5 };
int fis_gRO134[] = { 1 };
int fis_gRO135[] = { 1 };
int fis_gRO136[] = { 5 };
int fis_gRO137[] = { 5 };
int fis_gRO138[] = { 1 };
int fis_gRO139[] = { 1 };
int fis_gRO140[] = { 5 };
int fis_gRO141[] = { 5 };
int fis_gRO142[] = { 1 };
int fis_gRO143[] = { 1 };
int fis_gRO144[] = { 5 };
int fis_gRO145[] = { 5 };
int fis_gRO146[] = { 1 };
int fis_gRO147[] = { 1 };
int fis_gRO148[] = { 5 };
int fis_gRO149[] = { 5 };
int fis_gRO150[] = { 1 };
int fis_gRO151[] = { 1 };
int fis_gRO152[] = { 5 };
int fis_gRO153[] = { 5 };
int fis_gRO154[] = { 1 };
int fis_gRO155[] = { 1 };
int fis_gRO156[] = { 5 };
int fis_gRO157[] = { 5 };
int fis_gRO158[] = { 1 };
int fis_gRO159[] = { 1 };
int fis_gRO160[] = { 7 };
int fis_gRO161[] = { 7 };
int fis_gRO162[] = { 3 };
int fis_gRO163[] = { 3 };
int fis_gRO164[] = { 7 };
int fis_gRO165[] = { 7 };
int fis_gRO166[] = { 3 };
int fis_gRO167[] = { 3 };
int fis_gRO168[] = { 7 };
int fis_gRO169[] = { 7 };
int fis_gRO170[] = { 3 };
int fis_gRO171[] = { 3 };
int fis_gRO172[] = { 7 };
int fis_gRO173[] = { 7 };
int fis_gRO174[] = { 3 };
int fis_gRO175[] = { 3 };
int fis_gRO176[] = { 7 };
int fis_gRO177[] = { 7 };
int fis_gRO178[] = { 3 };
int fis_gRO179[] = { 3 };
int fis_gRO180[] = { 7 };
int fis_gRO181[] = { 7 };
int fis_gRO182[] = { 3 };
int fis_gRO183[] = { 3 };
int fis_gRO184[] = { 7 };
int fis_gRO185[] = { 7 };
int fis_gRO186[] = { 3 };
int fis_gRO187[] = { 3 };
int fis_gRO188[] = { 5 };
int fis_gRO189[] = { 5 };
int fis_gRO190[] = { 1 };
int fis_gRO191[] = { 1 };
int fis_gRO192[] = { 5 };
int fis_gRO193[] = { 5 };
int fis_gRO194[] = { 1 };
int fis_gRO195[] = { 1 };
int fis_gRO196[] = { 5 };
int fis_gRO197[] = { 5 };
int fis_gRO198[] = { 1 };
int fis_gRO199[] = { 1 };
int fis_gRO200[] = { 5 };
int fis_gRO201[] = { 5 };
int fis_gRO202[] = { 1 };
int fis_gRO203[] = { 5 };
int fis_gRO204[] = { 5 };
int fis_gRO205[] = { 1 };
int fis_gRO206[] = { 1 };
int fis_gRO207[] = { 5 };
int fis_gRO208[] = { 5 };
int fis_gRO209[] = { 1 };
int fis_gRO210[] = { 1 };
int fis_gRO211[] = { 5 };
int fis_gRO212[] = { 5 };
int fis_gRO213[] = { 1 };
int fis_gRO214[] = { 1 };
int fis_gRO215[] = { 5 };
int fis_gRO216[] = { 5 };
int fis_gRO217[] = { 1 };
int fis_gRO218[] = { 1 };
int fis_gRO219[] = { 7 };
int fis_gRO220[] = { 7 };
int fis_gRO221[] = { 3 };
int fis_gRO222[] = { 3 };
int fis_gRO223[] = { 7 };
int fis_gRO224[] = { 7 };
int fis_gRO225[] = { 3 };
int fis_gRO226[] = { 3 };
int fis_gRO227[] = { 7 };
int fis_gRO228[] = { 7 };
int fis_gRO229[] = { 3 };
int fis_gRO230[] = { 3 };
int fis_gRO231[] = { 7 };
int fis_gRO232[] = { 7 };
int fis_gRO233[] = { 3 };
int fis_gRO234[] = { 3 };
int fis_gRO235[] = { 7 };
int fis_gRO236[] = { 7 };
int fis_gRO237[] = { 3 };
int fis_gRO238[] = { 3 };
int fis_gRO239[] = { 7 };
int fis_gRO240[] = { 7 };
int fis_gRO241[] = { 3 };
int fis_gRO242[] = { 3 };
int fis_gRO243[] = { 7 };
int fis_gRO244[] = { 7 };
int fis_gRO245[] = { 3 };
int fis_gRO246[] = { 3 };
int fis_gRO247[] = { 1 };
int* fis_gRO[] = { fis_gRO0, fis_gRO1, fis_gRO2, fis_gRO3, fis_gRO4, fis_gRO5, fis_gRO6, fis_gRO7, fis_gRO8, fis_gRO9, fis_gRO10, fis_gRO11, fis_gRO12, fis_gRO13, fis_gRO14, fis_gRO15, fis_gRO16, fis_gRO17, fis_gRO18, fis_gRO19, fis_gRO20, fis_gRO21, fis_gRO22, fis_gRO23, fis_gRO24, fis_gRO25, fis_gRO26, fis_gRO27, fis_gRO28, fis_gRO29, fis_gRO30, fis_gRO31, fis_gRO32, fis_gRO33, fis_gRO34, fis_gRO35, fis_gRO36, fis_gRO37, fis_gRO38, fis_gRO39, fis_gRO40, fis_gRO41, fis_gRO42, fis_gRO43, fis_gRO44, fis_gRO45, fis_gRO46, fis_gRO47, fis_gRO48, fis_gRO49, fis_gRO50, fis_gRO51, fis_gRO52, fis_gRO53, fis_gRO54, fis_gRO55, fis_gRO56, fis_gRO57, fis_gRO58, fis_gRO59, fis_gRO60, fis_gRO61, fis_gRO62, fis_gRO63, fis_gRO64, fis_gRO65, fis_gRO66, fis_gRO67, fis_gRO68, fis_gRO69, fis_gRO70, fis_gRO71, fis_gRO72, fis_gRO73, fis_gRO74, fis_gRO75, fis_gRO76, fis_gRO77, fis_gRO78, fis_gRO79, fis_gRO80, fis_gRO81, fis_gRO82, fis_gRO83, fis_gRO84, fis_gRO85, fis_gRO86, fis_gRO87, fis_gRO88, fis_gRO89, fis_gRO90, fis_gRO91, fis_gRO92, fis_gRO93, fis_gRO94, fis_gRO95, fis_gRO96, fis_gRO97, fis_gRO98, fis_gRO99, fis_gRO100, fis_gRO101, fis_gRO102, fis_gRO103, fis_gRO104, fis_gRO105, fis_gRO106, fis_gRO107, fis_gRO108, fis_gRO109, fis_gRO110, fis_gRO111, fis_gRO112, fis_gRO113, fis_gRO114, fis_gRO115, fis_gRO116, fis_gRO117, fis_gRO118, fis_gRO119, fis_gRO120, fis_gRO121, fis_gRO122, fis_gRO123, fis_gRO124, fis_gRO125, fis_gRO126, fis_gRO127, fis_gRO128, fis_gRO129, fis_gRO130, fis_gRO131, fis_gRO132, fis_gRO133, fis_gRO134, fis_gRO135, fis_gRO136, fis_gRO137, fis_gRO138, fis_gRO139, fis_gRO140, fis_gRO141, fis_gRO142, fis_gRO143, fis_gRO144, fis_gRO145, fis_gRO146, fis_gRO147, fis_gRO148, fis_gRO149, fis_gRO150, fis_gRO151, fis_gRO152, fis_gRO153, fis_gRO154, fis_gRO155, fis_gRO156, fis_gRO157, fis_gRO158, fis_gRO159, fis_gRO160, fis_gRO161, fis_gRO162, fis_gRO163, fis_gRO164, fis_gRO165, fis_gRO166, fis_gRO167, fis_gRO168, fis_gRO169, fis_gRO170, fis_gRO171, fis_gRO172, fis_gRO173, fis_gRO174, fis_gRO175, fis_gRO176, fis_gRO177, fis_gRO178, fis_gRO179, fis_gRO180, fis_gRO181, fis_gRO182, fis_gRO183, fis_gRO184, fis_gRO185, fis_gRO186, fis_gRO187, fis_gRO188, fis_gRO189, fis_gRO190, fis_gRO191, fis_gRO192, fis_gRO193, fis_gRO194, fis_gRO195, fis_gRO196, fis_gRO197, fis_gRO198, fis_gRO199, fis_gRO200, fis_gRO201, fis_gRO202, fis_gRO203, fis_gRO204, fis_gRO205, fis_gRO206, fis_gRO207, fis_gRO208, fis_gRO209, fis_gRO210, fis_gRO211, fis_gRO212, fis_gRO213, fis_gRO214, fis_gRO215, fis_gRO216, fis_gRO217, fis_gRO218, fis_gRO219, fis_gRO220, fis_gRO221, fis_gRO222, fis_gRO223, fis_gRO224, fis_gRO225, fis_gRO226, fis_gRO227, fis_gRO228, fis_gRO229, fis_gRO230, fis_gRO231, fis_gRO232, fis_gRO233, fis_gRO234, fis_gRO235, fis_gRO236, fis_gRO237, fis_gRO238, fis_gRO239, fis_gRO240, fis_gRO241, fis_gRO242, fis_gRO243, fis_gRO244, fis_gRO245, fis_gRO246, fis_gRO247 };

// Input range Min
FIS_TYPE fis_gIMin[] = { 800, 800, 800, 800 };

// Input range Max
FIS_TYPE fis_gIMax[] = { 1024, 1024, 1024, 1024 };

// Output range Min
FIS_TYPE fis_gOMin[] = { 0 };

// Output range Max
FIS_TYPE fis_gOMax[] = { 100 };

//***********************************************************************
// Data dependent support functions for Fuzzy Inference System           
//***********************************************************************
// None for Sugeno

//***********************************************************************
// Fuzzy Inference System                                                
//***********************************************************************
void fis_evaluate()
{
    FIS_TYPE fuzzyInput0[] = { 0, 0, 0, 0 };
    FIS_TYPE fuzzyInput1[] = { 0, 0, 0, 0 };
    FIS_TYPE fuzzyInput2[] = { 0, 0, 0, 0 };
    FIS_TYPE fuzzyInput3[] = { 0, 0, 0, 0 };
    FIS_TYPE* fuzzyInput[fis_gcI] = { fuzzyInput0, fuzzyInput1, fuzzyInput2, fuzzyInput3, };
    FIS_TYPE fuzzyOutput0[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    FIS_TYPE* fuzzyOutput[fis_gcO] = { fuzzyOutput0, };
    FIS_TYPE fuzzyRules[fis_gcR] = { 0 };
    FIS_TYPE fuzzyFires[fis_gcR] = { 0 };
    FIS_TYPE* fuzzyRuleSet[] = { fuzzyRules, fuzzyFires };
    FIS_TYPE sW = 0;

    // Transforming input to fuzzy Input
    int i, j, r, o;
    for (i = 0; i < fis_gcI; ++i)
    {
        for (j = 0; j < fis_gIMFCount[i]; ++j)
        {
            fuzzyInput[i][j] =
                (fis_gMF[fis_gMFI[i][j]])(g_fisInput[i], fis_gMFICoeff[i][j]);
        }
    }

    int index = 0;
    for (r = 0; r < fis_gcR; ++r)
    {
        if (fis_gRType[r] == 1)
        {
            fuzzyFires[r] = 1;
            for (i = 0; i < fis_gcI; ++i)
            {
                index = fis_gRI[r][i];
                if (index > 0)
                    fuzzyFires[r] = fis_prod(fuzzyFires[r], fuzzyInput[i][index - 1]);
                else if (index < 0)
                    fuzzyFires[r] = fis_prod(fuzzyFires[r], 1 - fuzzyInput[i][-index - 1]);
                else
                    fuzzyFires[r] = fis_prod(fuzzyFires[r], 1);
            }
        }
        else
        {
            fuzzyFires[r] = 0;
            for (i = 0; i < fis_gcI; ++i)
            {
                index = fis_gRI[r][i];
                if (index > 0)
                    fuzzyFires[r] = fis_probor(fuzzyFires[r], fuzzyInput[i][index - 1]);
                else if (index < 0)
                    fuzzyFires[r] = fis_probor(fuzzyFires[r], 1 - fuzzyInput[i][-index - 1]);
                else
                    fuzzyFires[r] = fis_probor(fuzzyFires[r], 0);
            }
        }

        fuzzyFires[r] = fis_gRWeight[r] * fuzzyFires[r];
        sW += fuzzyFires[r];
    }

    if (sW == 0)
    {
        for (o = 0; o < fis_gcO; ++o)
        {
            g_fisOutput[o] = ((fis_gOMax[o] + fis_gOMin[o]) / 2);
        }
    }
    else
    {
        for (o = 0; o < fis_gcO; ++o)
        {
            FIS_TYPE sWI = 0.0;
            for (j = 0; j < fis_gOMFCount[o]; ++j)
            {
                fuzzyOutput[o][j] = fis_gMFOCoeff[o][j][fis_gcI];
                for (i = 0; i < fis_gcI; ++i)
                {
                    fuzzyOutput[o][j] += g_fisInput[i] * fis_gMFOCoeff[o][j][i];
                }
            }

            for (r = 0; r < fis_gcR; ++r)
            {
                index = fis_gRO[r][o] - 1;
                sWI += fuzzyFires[r] * fuzzyOutput[o][index];
            }

            g_fisOutput[o] = sWI / sW;
        }
    }
}