什么原因导致纳米错误结果?

我有这段代码贯穿循环。 小写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:

  • 除法0/0和±∞/±∞

  • 乘法0×±∞和±∞×0

  • 加法∞+( – ∞),( – ∞)+∞和等价减法

(这些被称为不确定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,所以输入数组的大部分未初始化。