C 执行printf时为nan
当我执行程序时C 执行printf时为nan,c,math.h,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",exp
#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;
}
为什么?因为
rand()
返回一个整数(介于0和rand\u MAX
之间),这个整数通常大于1,并且log
表达式将为负数log
返回负输入的NaN
(不是数字) 您是否已尝试在exponential()
中打印a
的值?只是一个注释--这种转发声明是绝对不必要的。如果您确实想在一个文件中执行此操作,请将func声明放在顶部,并将定义放在代码的底部
nan