我有一段代码在循环中运行。小写的x
var总是正确打印。大写的X
var有时打印正确,有时打印nan
或junk
。为什么?
注意:数据始终相同。
Link to FFT
Link to FFT example usage
Link to my other SO question which shows how this is being used.获得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);
3条答案
按热度按时间nfeuvbwi1#
在我工作过的其他语言中,“NaN”(不是一个数字)是当你用
0.0
除以0.0
时得到的结果。我不知道Objective-C,但它可能是一样的。至于是什么原因导致
nan
被存储在X
中......在任何人回答这个问题之前,你必须向我们展示fft
的主体。你说你认为这可能是一个内存/指针错误,因为它不一致。我刚刚查看了NaN在IEE 7754浮点格式中的表示方式(您的平台可能会使用)--基本上,几个高位(通常保存浮点数的指数)都必须用1填充。如果你确实有一个内存损坏的bug,它会导致垃圾存储到
X
中,那么如果那些特定的位碰巧都是1,那就会导致数字打印为“nan”。同样,请显示
fft
的主体,以便有人可以尝试进一步帮助您。bvuwiixz2#
我试着运行这个程序-使用
(*x)[j] = j
初始化数据,并删除i==512*20
打印条件。所有值都返回正常。我还尝试了随机输入数据-仍然正常。您输入数据的性质是什么?(我也会考虑您的其他问题)
编辑:我应该指出我填充了x数组的512个值--你上面的循环只填充了10个,所以输入数组的大部分是未初始化的。
pbossiut3#
在浮点运算中,有几个操作会导致NaN错误。维基百科指出这些操作会导致NaN:
(这些称为indeterminate forms。)
检查代码,查看是否正在执行任何不能得到数字答案的操作。
至于“垃圾”的结果,他们可能是混乱的内存分配的结果,但你没有提供太多的细节,所以我不能肯定。