执行printf时的nan

Ger*_*llo -1 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;
}
Run Code Online (Sandbox Code Playgroud)

我获得:

nan
Run Code Online (Sandbox Code Playgroud)

为什么?

Mar*_*son 6

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