我编写了一个函数,它返回序列的限制(如果存在)。
当序列没有收敛时(无限制),我想返回一个标志。
如何定义此标志?我不能选择一个随机值,因为这个值有可能等于序列的限制,所以会有一个模糊性。
感谢。
答案 0 :(得分:2)
从here开始,您会注意到INFINITY
(以及-INFINITY
)和NAN
(不是数字)的宏。您可以选择返回序列收敛的限制,或者(例如,x
)INFINITY
的总和,或(例如,-x
的总和)-INFINITY
,或(例如)sin(x/4)
或((x%2)*2)-1)
NAN
(因为总和永不收敛)。
如果您不喜欢这样,那么如何返回一个整数来表示它是否收敛,以及参数提供的地址限制如下:
int
converges (double *limit)
{
if ( ... it converges ...)
{
*limit = whatItConvergesToo;
return 1;
}
else
{
return 0;
}
}
或者,如果您不喜欢,请定义struct
或typedef 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();
}