当我执行程序
时#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
为什么?
答案 0 :(得分:6)
因为rand()
返回一个整数(介于0和RAND_MAX
之间),所以通常这个整数大于1而你的log
表达式将为负数。 log
为负输入返回NaN
(不是数字)。