rem: if (loga != logb) return loga < logb ? 1 : -1;
add: if (log_a != log_b) return log_a < log_b ? 1 : -1;
context: numcompare (register const char *a, register const char *b){  register int tmpa, tmpb, tmp;  register size_t loga, logb;  tmpa = *a;  tmpb = *b;  while (blanks[UCHAR (tmpa)])    tmpa = *++a;  while (blanks[UCHAR (tmpb)])    tmpb = *++b;  if (tmpa == NEGATION_SIGN)    {      do	tmpa = *++a;      while (tmpa == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpa));      if (tmpb != NEGATION_SIGN)	{	  if (tmpa == decimal_point)	    do	      tmpa = *++a;	    while (tmpa == NUMERIC_ZERO);	  if (ISDIGIT (tmpa))	    return -1;	  while (tmpb == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpb))	    tmpb = *++b;	  if (tmpb == decimal_point)	    do	      tmpb = *++b;	    while (tmpb == NUMERIC_ZERO);	  if (ISDIGIT (tmpb))	    return -1;	  return 0;	}      do	tmpb = *++b;      while (tmpb == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpb));      while (tmpa == tmpb && ISDIGIT (tmpa))	{	  do	    tmpa = *++a;	  while (IS_THOUSANDS_SEP (tmpa));	  do	    tmpb = *++b;	  while (IS_THOUSANDS_SEP (tmpb));	}      if ((tmpa == decimal_point && !ISDIGIT (tmpb))	  || (tmpb == decimal_point && !ISDIGIT (tmpa)))	return -fraccompare (a, b);      tmp = tmpb - tmpa;      for (loga = 0; ISDIGIT (tmpa); ++loga)	do	  tmpa = *++a;	while (IS_THOUSANDS_SEP (tmpa));      for (logb = 0; ISDIGIT (tmpb); ++logb)	do	  tmpb = *++b;	while (IS_THOUSANDS_SEP (tmpb));      if (loga != logb)	return loga < logb ? 1 : -1;      if (!loga)	return 0;      return tmp;    }  else if (tmpb == NEGATION_SIGN)    {      do	tmpb = *++b;      while (tmpb == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpb));      if (tmpb == decimal_point)	do	  tmpb = *++b;	while (tmpb == NUMERIC_ZERO);      if (ISDIGIT (tmpb))	return 1;      while (tmpa == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpa))	tmpa = *++a;      if (tmpa == decimal_point)	do	  tmpa = *++a;	while (tmpa == NUMERIC_ZERO);      if (ISDIGIT (tmpa))	return 1;      return 0;    }  else    {      while (tmpa == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpa))	tmpa = *++a;      while (tmpb == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpb))	tmpb = *++b;      while (tmpa == tmpb && ISDIGIT (tmpa))	{	  do	    tmpa = *++a;	  while (IS_THOUSANDS_SEP (tmpa));	  do	    tmpb = *++b;	  while (IS_THOUSANDS_SEP (tmpb));	}      if ((tmpa == decimal_point && !ISDIGIT (tmpb))	  || (tmpb == decimal_point && !ISDIGIT (tmpa)))	return fraccompare (a, b);      tmp = tmpa - tmpb;      for (loga = 0; ISDIGIT (tmpa); ++loga)	do	  tmpa = *++a;	while (IS_THOUSANDS_SEP (tmpa));      for (logb = 0; ISDIGIT (tmpb); ++logb)	do	  tmpb = *++b;	while (IS_THOUSANDS_SEP (tmpb));      if (loga != logb)	return loga < logb ? -1 : 1;      if (!loga)	return 0;      return tmp;    }}