方便的FLAG用于限制序列

时间:2014-11-09 19:30:50

标签: c sequence flags

我编写了一个函数,它返回序列的限制(如果存在)。

当序列没有收敛时(无限制),我想返回一个标志。

如何定义此标志?我不能选择一个随机值,因为这个值有可能等于序列的限制,所以会有一个模糊性。

感谢。

2 个答案:

答案 0 :(得分:2)

here开始,您会注意到INFINITY(以及-INFINITY)和NAN(不是数字)的宏。您可以选择返回序列收敛的限制,或者(例如,xINFINITY的总和,或(例如,-x的总和)-INFINITY ,或(例如)sin(x/4)((x%2)*2)-1) NAN(因为总和永不收敛)。

如果您不喜欢这样,那么如何返回一个整数来表示它是否收敛,以及参数提供的地址限制如下:

int
converges (double *limit)
{
    if ( ... it converges ...)
    {
        *limit = whatItConvergesToo;
        return 1;
    }
    else
    {
        return 0;
    }
}

或者,如果您不喜欢,请定义structtypedef struct并返回:

typedef struct limit
{
  int converges;
  double limit;
} limit_t;

limit_t
findlimit ()
{
    limit_t l;
    if ( ... it converges ...)
    {
        l.limit = whatItConvergesToo;
        l.converges = 1;
    }
    else
    {
        l.limit = 0; /* be nice */
        l.converges = 0;
    }
    return l;
}

答案 1 :(得分:0)

使用NAN来表示特殊答案很容易(正如@ Deduplicator所建议的那样)。

double find_limit() {
  double limit = ...
  if (limit_not_found) return 0.0/0.0;  // Form NaN or use a macro/constant here
  return limit;
}


void foo() {
  double y = find_limit();
  if (y != y) puts("No limit found");  // NaN is not even equal to itself
  else The_HappyPath();
}