1

我有这段代码通过循环运行。小写的xvar 总是能正确打印。大写的Xvar 有时会正确打印,有时会打印nanjunk. 为什么?

注意 数据始终相同。

链接到 FFT

链接到 FFT 示例用法

链接到我的另一个 SO question,它显示了它是如何被使用的。 赏金 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);
4

3 回答 3

1

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

  • 分割 0/0 和 ±∞/±∞</p>

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

  • 加法 ∞ + (−∞)、(−∞) + ∞ 和等效减法

(这些被称为不确定形式。)

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

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

于 2012-10-20T14:12:45.610 回答
0

I tried running this - initialised the data using (*x)[j] = j and removed the i==512*20 printing condition. All values came back fine. I also tried with random input data - still good. What is the nature of your input data?

(I'll look at your other question as well)

edit: I should point out I filled 512 values of the x array - your loop above only fills 10, so much of the input array is uninitialised.

于 2012-10-23T05:29:47.803 回答
0

在我使用过的其他语言中,“NaN”(不是数字)是您将 a 除以 时得到0.00.0。我不知道Objective-C,但很可能是一样的。

至于是什么导致nan存储在X......你必须fft在任何人回答之前向我们展示身体。您说您认为这可能是内存/指针错误,因为它不一致。我刚刚查看了 NaN 在 IEE 7754 浮点格式(您的平台可能正在使用的格式)中的表示方式——基本上,几个高位(通常保存浮点数的指数)都必须用 1s 填充。

如果您确实有内存损坏错误,导致垃圾被存储到X中,那么如果这些特定位恰好都是 1,那将导致数字打印为“nan”。

再次,请展示 的正文fft,以便有人可以进一步帮助您。

于 2012-10-20T14:07:39.223 回答