c/c++语言开发共享什么原因导致纳米错误结果?

我有这段代码贯穿循环。 小写x var始终正确打印。 大写X var有时打印正确 ,有时打印nanjunk 。 为什么?

NB数据始终相同。

链接到FFT

链接到FFT示例用法

链接到我的其他SO问题,显示如何使用它。 BOUNTY的200分!

 double (*x)[2]; double (*X)[2]; x = malloc(2 * 512 * sizeof(double)); X = malloc(2 * 512 * sizeof(double)); for (j = 0; j < 10; j++){ (*x)[j] = // values inserted from method argument.; } fft(512, x, X); for (j = 0; j < 512; j++){ if (i==512*20) { NSLog(@"PRE POST %f - %f",(*x)[j], (*X)[j]); } } free(x); free(X); 

    在浮点运算中,有几个操作会导致NaN错误。 维基百科指出这些操作导致了NaN:

    (这些被称为不确定forms 。)

    检查您的代码,看看您是否正在执行任何无法获得数字答案的操作。

    至于“垃圾”结果,它们可能是混乱的内存分配的结果,但你没有给出太多细节,所以我不能确定。

    在我工作的其他语言中,当你将0.0除以0.0时,你得到的是“NaN”(不是数字)。 我不知道Objective-C,但它可能是相同的。

    至于是什么导致nan存储在X …你必须fft我们展示fft的身体然后才能回答这个问题。 你说你认为它可能是一个内存/指针错误,因为它不一致。 我只是查看了NaN在IEE 7754浮点格式(你的平台可能使用的)中的表示方式 – 基本上,几个高阶位(通常保持浮点数的指数)都必须充满了1s。

    如果你确实有一个内存损坏错误,导致垃圾被存储到X ,那么如果这些特定位都发生在1,那么这将导致数字打印为“nan”。

    再次,请显示fft的主体,以便有人可以尝试进一步帮助您。

    我尝试运行它 – 使用(*x)[j] = j初始化数据并删除i==512*20打印条件。 所有价值都回来了。 我也试过随机输入数据 – 仍然很好。 输入数据的性质是什么?

    (我也会看看你的其他问题)

    编辑:我应该指出我填充了x数组的512个值 – 上面的循环只填充10,所以输入数组的大部分未初始化。

      以上就是c/c++开发分享什么原因导致纳米错误结果?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/550036.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐