Had a quick look at the compare issue.
If only one of the numbers is positive, it's the largest
If both are positive, you need to return big_cmp_abs()
If both are negative, you need to return -1 * cmp_abs()
Or something like that.
Also, big_cmp_abs seems wrong. The nested loops don't make sense...