执行printf时的nan

时间:2014-05-24 10:30:27

标签: c math.h

当我执行程序

#include <stdio.h>
#include <math.h>
#include <unistd.h>

double exponential(double u);

double exponential(double u)
{
    double a = (double)rand();
    return (-u * log(1.0 - a));
}

int main(void)
{
    printf("%e\n",exponential(2.3));
    return 0;
}

我获得:

nan

为什么?

1 个答案:

答案 0 :(得分:6)

因为rand()返回一个整数(介于0和RAND_MAX之间),所以通常这个整数大于1而你的log表达式将为负数。 log为负输入返回NaN(不是数字)。