27void stepUp(
int level,
float **A,
float **B,
int *currentRootsCount) {
30 for (
int i = 0;
i < level;
i++) {
31 float s =
fabs(A[level][
i]);
37 currentRootsCount[level] = 0;
39 for (
int i = 0;
i <= currentRootsCount[level - 1];
i++) {
40 int signLeft, signRight;
41 float edgeLeft, edgeRight;
42 float edgeNegativ, edgePositiv;
47 edgeLeft = B[level - 1][
i - 1];
49 float rb =
polinom(level, edgeLeft, A[level]);
52 B[level][currentRootsCount[level]] = edgeLeft;
53 currentRootsCount[level]++;
62 if (
i == currentRootsCount[level - 1])
65 edgeRight = B[level - 1][
i];
67 rb =
polinom(level, edgeRight, A[level]);
70 B[level][currentRootsCount[level]] = edgeRight;
71 currentRootsCount[level]++;
79 if (signLeft == signRight)
83 edgeNegativ = edgeLeft;
84 edgePositiv = edgeRight;
86 edgeNegativ = edgeRight;
87 edgePositiv = edgeLeft;
90 B[level][currentRootsCount[level]] =
91 dihot(level, edgeNegativ, edgePositiv, A[level]);
92 currentRootsCount[level]++;
99 float *kf =
new float[n + 1];
101 float **A =
new float *[n + 1];
102 float **B =
new float *[n + 1];
104 int *currentRootsCount =
new int[n + 1];
106 for (
int i = 1;
i <= n;
i++) {
111 for (
int i = 0;
i <= n;
i++)
114 for (
int i = 0;
i < n;
i++)
115 A[n][
i] = kf[
i] / kf[n];
117 for (
int i1 = n,
i = n - 1;
i > 0; i1 =
i,
i--) {
118 for (
int j1 =
i, j =
i - 1; j >= 0; j1 = j, j--) {
119 A[
i][j] = A[i1][j1] * j1 / i1;
123 currentRootsCount[1] = 1;
126 for (
int i = 2;
i <= n;
i++)
127 stepUp(
i, A, B, currentRootsCount);
129 rootsCount = currentRootsCount[n];
130 for (
int i = 0;
i < rootsCount;
i++)
131 rootsArray[
i] = B[n][
i];
133 for (
int i = 1;
i <= n;
i++) {
139 delete[] currentRootsCount;