C exp()函数在不应返回nan时返回nan

C exp()函数在不应返回nan时返回nan,c,nan,C,Nan,下面是while循环中的一段代码,我使用exp()函数计算了一些概率。无论程序的输入是什么 在循环的第7次迭代中,exp返回nan if(new<=old){ coloring[random_node]=random_color; }else{ proba=exp((-(new-old))/temperature); /*assert(!isnan(proba));*/ printf("proba == %.50f\n",proba);

下面是while循环中的一段代码,我使用exp()函数计算了一些概率。无论程序的输入是什么 在循环的第7次迭代中,exp返回nan

  if(new<=old){
     coloring[random_node]=random_color;
  }else{
     proba=exp((-(new-old))/temperature);
     /*assert(!isnan(proba));*/
     printf("proba == %.50f\n",proba);
     if(random_percent(proba)){
            coloring[random_node]=random_color;
     }
  }

在这两种情况下,使用的变量值完全相同。

扎克的直觉是正确的。我的random_percent函数如下所示,未声明round()宏

int random_percent(double probability){ 
    int edge=round(100*probability); 
    return ((rand () % 100) < edge) ? 1 : 0;  
}
int随机百分比(双概率){
整数边=圆形(100*概率);
返回((rand()%100)
如果在GDB提示符下键入
p((双(*)(双))exp)((新旧)/温度)
,情况是否会改变?如果是,您是否将#包括在内?(我闻到一种隐含的声明。)哦,如果这并没有揭示问题,那么试试
valgrind
。这不是明显的内存损坏,但可能是细微的内存损坏。没有任何变化,我包括了数学library@Zack感谢您对隐式声明的建议。在
random\u percent
函数中,我使用了一个未声明的round宏。@Zack我应该如何着手解决这个问题?这就是为什么应该禁用隐式声明。
int random_percent(double probability){ 
    int edge=round(100*probability); 
    return ((rand () % 100) < edge) ? 1 : 0;  
}