什么原因导致纳米错误结果?
我有这段代码贯穿循环。 小写x
var始终正确打印。 大写X
var有时打印正确 ,有时打印nan
或junk
。 为什么?
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,所以输入数组的大部分未初始化。