old code: coeffsU[0] = (1 - u) * (1 - u) * (1 - u); coeffsU[1] = 3 * u * (1 - u) * (1 - u); coeffsU[2] = 3 * u * u * (1 - u); coeffsU[3] = u * u * u; new code: if (u != 1) { u[0] = pow(1 - u, GRID_WIDTH - 1); i = 1; if (i < 4) u[i] = u[i - 1] * u / (1 - u); u[i] *= (float)(4 - i) / i; i++; // i == 2 if (i < 4) u[i] = u[i - 1] * u / (1 - u); u[i] *= (float)(4 - i) / i; i++; // i == 3 if (i < 4) u[i] = u[i - 1] * u / (1 - u); u[i] *= (float)(4 - i) / i; i++; // i == 4 if (i < 4) // won't enter } else { i = 0; if (i < 4 - 1) u[i] = 0 i++; // i == 1 if (i < 4 - 1) u[i] = 0 i++; // i == 2 if (i < 4 - 1) u[i] = 0 i++; // i == 3 if (i < 4 - 1) // won't enter u[i] = i; }