Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 执行printf时为nan_C_Math.h - Fatal编程技术网

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