int *GBB(int *arr1, int *arr2){ //arr1 > arr2; int ans = 1; while (notZero(arr1)==1 && notZero(arr2)==1) { if (arr2[0] % 2 == 0 && arr1[0] % 2 ==0){ ans *= 2; //printf("ans*2\n"); arr1 = divTwo(arr1); arr2 = divTwo(arr2); continue; } else if (arr2[0] % 2 == 0 && arr1[0] %2 == 1){ arr2 = divTwo(arr2); continue; } else if (arr2[0] % 2 == 1 && arr1[0] %2 == 0){ arr1 = divTwo(arr1); continue; } if (compare(arr1, arr2) == 1) { swap(arr1, arr2); // printf("swap"); } arr1 = minus(arr1, arr2); // printf("minus\n"); } printf("ans: %d\n", ans); printf("Final arr2:\n"); printNum(arr2); return times(arr2, ans); }
void transform_t::picker() { const GLfixed* const m = matrix.m; // XXX: picker needs to be smarter flags = 0; ops = OP_ALL; point2 = point2__generic; point3 = point3__generic; point4 = point4__generic; // find out if this is a 2D projection if (!(notZero(m[3]) | notZero(m[7]) | notZero(m[11]) | notOne(m[15]))) { flags |= FLAGS_2D_PROJECTION; } }
static inline int notOne(GLfixed v) { return notZero(v - 0x10000); }