我有一大堆代码通过循环运行。小写x
var始终正确打印。大写X
var有时正确打印,有时会打印nan
或junk
。为什么呢?
N.B。数据始终相同。
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);
答案 0 :(得分:0)
在我工作的其他语言中,&#34; NaN&#34; ({一个}除以0.0
除以0.0
后得到的数字。我不了解Objective-C,但它可能是相同的。
至于导致nan
存储X
的原因......在任何人都可以回复之前,您必须向我们展示fft
的正文。你说你认为它可能是一个内存/指针错误,因为它不一致。我只是查看了NaN在IEE 7754浮点格式(你的平台可能使用的)中的表示方式 - 基本上,几个高阶位(通常保持浮点数的指数)都必须充满了1s。
如果你确实有一个内存损坏错误,导致垃圾被存储到X
,那么如果这些特定位都发生在1,这将导致数字打印为&#34; nan& #34;
再次,请显示fft
的正文,以便有人可以尝试进一步帮助您。
答案 1 :(得分:0)
在浮点运算中,有几个操作会导致NaN错误。 Wikipedia指出这些操作导致NaN:
分区0/0和±∞/±∞
乘法0×±∞和±∞×0
加法∞+( - ∞),( - ∞)+∞及等效减法
(这些被称为indeterminate forms。)
检查您的代码,看看您是否正在执行任何无法获得数字答案的操作。
对于'垃圾'结果,它们可能是混乱的内存分配的结果,但你没有提供太多细节,所以我无法确定。
答案 2 :(得分:0)
我尝试运行此操作 - 使用(*x)[j] = j
初始化数据并删除了i==512*20
打印条件。所有价值都回来了。我也试过随机输入数据 - 仍然很好。输入数据的性质是什么?
(我也会看你的另一个问题)
编辑:我应该指出我填充了x数组的512个值 - 上面的循环只填充了10个,所以很多输入数组都没有初始化。