Добрый день, уважаемые участники форума!
Сейчас я занимаюсь написанием программы-калькулятора(для выражений вроде 2^2+3*(6-4)/5.2) и у меня возникли некоторые трудности, с разрешением которых я прошу вас мне помочь.
Программа должна адекватно реагировать на исключения, и то первое, с чем я столкнулся - это деление на ноль.
Предположим у нас есть зверская функция для замены произведений и частных в строке(её досконально проверять нет особой необходимости, она здесь просто для ясности):
char *remove_md(char *expression)
{
  char *p = expression, *left, *right, op1, op2, *DOUBLE;     //BUFFER FOR double
  int i = 0, shift;
  double result, right_op;
  op1 = '*', op2 = '/';
  while(p[i])
    if(p[i] == op1 || p[i] == op2)
    {
      if(is_null(right_op = make_double(p + i + 1, &shift)) && p[i] == op2)//(make_double в shift сохраняет  cколько символов прочитала)
      {
        //do something!!!
      }
      DOUBLE = calloc(MAX_DOUBLE, 1);
      right = p + i + shift, left = p + i - 1;
           
      while(left > p)
      {
        if((*(left - 1) == 'e' || *(left - 1) == 'E') && left > p) 
          --left;
        if(isop(*left))
         break;
        --left;
      }
      if(left != p)
          ++left;
      if(p[i] == op2)
        result = bin_op(make_double(left, &shift), right_op, 4);
      else
        result = bin_op(make_double(left, &shift), right_op, 3);
      sprintf_s(DOUBLE, MAX_DOUBLE, "%.20g", result);
      p = insert(expression, left, right + 1, DOUBLE);
      expression = p;
      free(DOUBLE);
      i = 0;
    }
    else
     ++i;
  return p;
}
 
  и тут у меня вопрос по непосредственной 
проверке числа double на равенство нулю
Как лучше всего реализовать is_null? Понятно, что проверять == не дело с double. Может что-то с битами?
Второй вопрос на будущее: что делать, когда этот 0 найдется? Дело в том, что программа довольно большая получается, для начинающего вроде меня(700-800 строк уже сейчас) и обработка ошибок сделана в самом начале(анализ формата введенного выражения). Ошибка с нулем же - совсем другого рода, она в ходе вычислений получается и нужно как-то выкарабкаться из нагромождения функций. Как тут грамотней поступить?