Exemple #1
0
        public override void BuildSegment()
        {
            var d = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber + 1));
                var data2  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber));
                var data3  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber + 2));
                var data4  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber - 2));
                var data5  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber + 4));
                var result = data1 - Data <double> .FloorWithHalfAdded((9 / 16d) * (data2 + data3) - (1 / 16d) * (data4 + data5));
                return(Data <T> .DoubleToT(result));
            }, inputNodes[0]);
            var s = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber));
                var data2  = Data <T> .ToDouble(input[1].GetData(dataNumber - 1));
                var data3  = Data <T> .ToDouble(input[1].GetData(dataNumber));
                var data4  = Data <T> .ToDouble(input[1].GetData(dataNumber - 2));
                var data5  = Data <T> .ToDouble(input[1].GetData(dataNumber + 1));
                var result = data1 + Data <double> .FloorWithHalfAdded((9 / 32) * (data2 + data3) - (1 / 32) * (data4 + data5));
                return(Data <T> .DoubleToT(result));
            }, inputNodes[0], d);

            outputNodes[0] = s;
            outputNodes[1] = d;
        }
Exemple #2
0
        public override void BuildSegment()
        {
            var d1 = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber + 1));
                var data2  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber));
                var data3  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber + 2));
                var result = data1 + Data <double> .FloorWithHalfAdded(alpha * (data2 + data3));
                return(Data <T> .DoubleToT(result));
            }, inputNodes[0]);
            var s1 = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber));
                var data2  = Data <T> .ToDouble(input[1].GetData(dataNumber));
                var data3  = Data <T> .ToDouble(input[1].GetData(dataNumber - 1));
                var result = data1 + Data <double> .FloorWithHalfAdded(beta * (data2 + data3));
                return(Data <T> .DoubleToT(result));
            }, inputNodes[0], d1);
            var dm = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(dataNumber));
                var data2  = Data <T> .ToDouble(input[1].GetData(dataNumber));
                var data3  = Data <T> .ToDouble(input[1].GetData(dataNumber + 1));
                var result = data1 + Data <double> .FloorWithHalfAdded(gama * (data2 + data3));
                return(Data <T> .DoubleToT(result));
            }, d1, s1);
            var sm = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(dataNumber));
                var data2  = Data <T> .ToDouble(input[1].GetData(dataNumber));
                var data3  = Data <T> .ToDouble(input[1].GetData(dataNumber - 1));
                var result = data1 + Data <double> .FloorWithHalfAdded(delta * (data2 + data3));
                return(Data <T> .DoubleToT(result));
            }, s1, dm);
            var d = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(dataNumber));
                var result = Data <double> .FloorWithHalfAdded((1 / K) * data1);
                return(Data <T> .DoubleToT(result));
            }, dm);
            var s = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(dataNumber));
                var result = Data <double> .FloorWithHalfAdded(K * data1);
                return(Data <T> .DoubleToT(result));
            }, sm);

            outputNodes[0] = s;
            outputNodes[1] = d;
        }
Exemple #3
0
        public override void BuildSegment()
        {
            var outputCount = outputNodes.Length;

            for (int i = 0; i < outputCount; i++)
            {
                var offset = i;
                outputNodes[i] = new UniversalNode <T>(
                    (InputStreamsEnvelope <T>[] input, int dataNumber) =>
                {
                    return(input[0].GetData(dataNumber * outputCount + offset));
                }, inputNodes[0]);
            }
        }
Exemple #4
0
        public override void BuildSegment()
        {
            var d = new UniversalNode <T>(
                (input, dataNumber) => {
                var data1 = input[0].GetData(2 * dataNumber + 1);
                var data2 = input[0].GetData(2 * dataNumber - 2);
                var data3 = input[0].GetData(2 * dataNumber);
                return(data1 - ((data2 + data3) / 2));
            }, inputNodes[0]);
            var s = new UniversalNode <T>(
                (input, dataNumber) => {
                var data1 = input[0].GetData(2 * dataNumber);
                var data2 = input[1].GetData(dataNumber - 1);
                var data3 = input[1].GetData(dataNumber);
                return(data1 + ((data2 + data3) / 4));
            }, inputNodes[0], d);

            outputNodes[0] = s;
            outputNodes[1] = d;
        }
Exemple #5
0
        public override void BuildSegment()
        {
            var sM = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data   = Data <T> .ToDouble(input[0].GetData(dataNumber));
                var result = Data <double> .FloorWithHalfAdded((1 / K) * data);
                return(Data <T> .DoubleToT(result));
            }, inputNodes[0]);
            var dM = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data   = Data <T> .ToDouble(input[0].GetData(dataNumber));
                var result = Data <double> .FloorWithHalfAdded(K * data);
                return(Data <T> .DoubleToT(result));
            }, inputNodes[1]);
            var d1 = new UniversalNode <T>(
                (input, dataNumber) => {
                var data1 = input[0].GetData(dataNumber);
                var data2 = input[1].GetData(dataNumber + 1);
                return(data1 - data2);
            }, dM, sM);
            var s = new UniversalNode <T>(
                (input, dataNumber) => {
                var data1  = Data <T> .ToDouble(input[0].GetData(dataNumber));
                var data2  = Data <T> .ToDouble(input[1].GetData(dataNumber));
                var data3  = Data <T> .ToDouble(input[1].GetData(dataNumber - 1));
                var result = data1 - Data <double> .FloorWithHalfAdded(Math.Sqrt(3) / 4 * data2 + (Math.Sqrt(3) - 2) / 4 * data3);
                return(Data <T> .DoubleToT(result));
            }, sM, d1);
            var d = new UniversalNode <T>(
                (input, dataNumber) => {
                var data1  = Data <T> .ToDouble(input[0].GetData(dataNumber));
                var data2  = Data <T> .ToDouble(input[1].GetData(dataNumber));
                var result = data1 + Data <double> .FloorWithHalfAdded(Math.Sqrt(3) * data2);
                return(Data <T> .DoubleToT(result));
            }, d1, s);
            var merger = new Merge <T>(s, d);

            outputNodes[0] = merger;
        }
Exemple #6
0
        public override void BuildSegment()
        {
            var d2 = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data = input[0].GetData(dataNumber);
                return(((Math.Sqrt(3) + 1) / Math.Sqrt(2)) * data);
            }, inputNodes[1]);
            var s1 = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data = input[0].GetData(dataNumber);
                return(((Math.Sqrt(3) - 1) / Math.Sqrt(2)) * data);
            }, inputNodes[0]);
            var d1 = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1 = input[0].GetData(dataNumber);
                var data2 = input[1].GetData(dataNumber - 1);
                return(data1 - data2);
            }, d2, s1);
            var xEven = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1 = input[0].GetData(dataNumber);
                var data2 = input[1].GetData(dataNumber);
                var data3 = input[1].GetData(dataNumber + 1);
                return(data1 - Math.Sqrt(3) / 4 * data2 - (Math.Sqrt(3) - 2) / 4 * data3);
            }, s1, d1);
            var xOdd = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1 = input[0].GetData(dataNumber);
                var data2 = input[1].GetData(dataNumber);
                return(data1 + Math.Sqrt(3) * data2);
            }, d1, xEven);
            var merger = new Merge <T>(xEven, xOdd);

            outputNodes[0] = merger;
        }
Exemple #7
0
        public override void BuildSegment()
        {
            var d1 = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1 = input[0].GetData(2 * dataNumber + 1);
                var data2 = input[0].GetData(2 * dataNumber);
                return(data1 - Math.Sqrt(3) * data2);
            }, inputNodes[0]);
            var s1 = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1 = input[0].GetData(2 * dataNumber);
                var data2 = input[1].GetData(dataNumber);
                var data3 = input[1].GetData(dataNumber + 1);
                return(data1 + (Math.Sqrt(3) / 4) * data2 + ((Math.Sqrt(3) - 2) / 4) * data3);
            }, inputNodes[0], d1);
            var d2 = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1 = input[0].GetData(dataNumber);
                var data2 = input[1].GetData(dataNumber - 1);
                return(data1 + data2);
            }, d1, s1);
            var s = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data = input[0].GetData(dataNumber);
                return(((Math.Sqrt(3) + 1) / (Math.Sqrt(2))) * data);
            }, s1);
            var d = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data = input[0].GetData(dataNumber);
                return(((Math.Sqrt(3) - 1) / (Math.Sqrt(2))) * data);
            }, d2);

            outputNodes[0] = s;
            outputNodes[1] = d;
        }
Exemple #8
0
        public override void BuildSegment()
        {
            var d1 = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber + 1));
                var data2  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber));
                var data3  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber + 2));
                var result = data1 - Data <double> .FloorWithHalfAdded((1 / 2) * (data2 + data3));
                return(Data <T> .DoubleToT(result));
            }, inputNodes[0]);
            var s = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(2 * dataNumber + 1));
                var data2  = Data <T> .ToDouble(input[1].GetData(dataNumber - 1));
                var data3  = Data <T> .ToDouble(input[1].GetData(dataNumber));
                var result = data1 + Data <double> .FloorWithHalfAdded((1 / 4) * (data2 + data3));
                return(Data <T> .DoubleToT(result));
            }, inputNodes[0], d1);
            var d = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1  = Data <T> .ToDouble(input[0].GetData(dataNumber));
                var data2  = Data <T> .ToDouble(input[1].GetData(dataNumber - 1));
                var data3  = Data <T> .ToDouble(input[1].GetData(dataNumber));
                var data4  = Data <T> .ToDouble(input[1].GetData(dataNumber + 1));
                var data5  = Data <T> .ToDouble(input[1].GetData(dataNumber + 2));
                var data6  = Data <T> .ToDouble(input[0].GetData(dataNumber + 1));
                var result = data1 - Data <double> .FloorWithHalfAdded(
                    (alpha * ((-1 / 2d) * data2 + data3 - (1 / 2d) * data4)) +
                    (beta * ((-1 / 2d) * data3 + data4 - (1 / 2d) * data5)) +
                    (gama * data6));
                return(Data <T> .DoubleToT(result));
            }, d1, s);

            outputNodes[0] = s;
            outputNodes[1] = d;
        }
Exemple #9
0
        public override void BuildSegment()
        {
            var U = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1 = input[0].GetData(dataNumber - 1);
                var data2 = input[0].GetData(dataNumber);
                return((data1 + data2) / 4);
            }, inputNodes[1]);
            var substract = new Subtract <T>(inputNodes[0], U);
            var P         = new UniversalNode <T>(
                (input, dataNumber) =>
            {
                var data1 = input[0].GetData(dataNumber - 1);
                var data2 = input[0].GetData(dataNumber);
                return((data1 + data2) / 2);
            }, substract);
            var add   = new Add <T>(P, inputNodes[1]);
            var merge = new Merge <T>(substract, add);

            outputNodes[0] = merge;
        }