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; }
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; }
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]); } }
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; }
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; }
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; }
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; }
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; }
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; }