C语言NaN咋调试?

1. 减少网格数和颗粒数,方便输出调试;2. 看懂程序函数调用过程,方便输出调试;3. 添加输出中间变量文件的模块或是函数,方便输出调试;4. 最后,当然是输出调试了
■网友
有几种常见情况会导致NaN,比如说使用实数的时候对负数开方,可以参考 NaN - Wikipedia
有个简单办法判断一个浮点数,a,是不是NaN, if(a!=a) { // it\u0026#39;s a NaN},这样就不用全部输出了。
【C语言NaN咋调试?】 其他的方法要看你的编程环境了。intel的c编译器在linux下可以用 -fp-trap=all 选项。
给两个链接
Floating-Point Exceptions under windows
Trapping floating point exceptions in Linux

■网友
一般不要一口吃一个胖子,一上来就跑很大的程序,可以从比较粗的网格,比较小的domain开始慢慢试。如果有turbulence可以先试试laminar能不能跑,显示的话查查CFL number有多少,减小时间步长之类的。试完了发现算法没问题,再慢慢增加复杂程度。
我有几次遇到NaN是因为什么地方除了一个0。还有就是C里面万一memory没allocate好,可能用错了memory了。这些只是可能,具体怎么回事还是得自己慢慢调。。。

■网友
输出调试,观察有可能出错的中间变量随迭代的变化趋势。当然看脸也很重要。


    推荐阅读