【问题标题】:Floating point exception (core dumped)浮点异常(核心转储)
【发布时间】:2013-06-25 14:22:19
【问题描述】:

我有一个很长的程序,它由一个头文件和两个源文件组成,在第一个中我已经编写了函数的实现,在第二个(这是我的主要)中,我调用并执行他们。不过,有一次我收到一条错误消息,说

浮点异常(核心转储)

程序停止。

正如我所说,代码行数很多,因此,我无法在此处发布我的整个源代码,但我会发布最相关的部分以及发生错误的位置。

当我尝试调用此函数时出现错误(您可以在下面找到它的实现):

void chest_first(Complex* FFTInput, Complex* IFFTOutput, Complex* HFirst)
{
    int i;

    for(i = 0; i < 64; i++)
    {
        HFirst[i].real = FFTInput[i].real / IFFTOutput[i].real;
        HFirst[i].imag = FFTInput[i].imag / IFFTOutput[i].imag;
    }

}

在本例中,Complex 是我定义的类型定义。

typedef struct {
    int real, imag;
} Complex;

这是 main 中调用此函数的部分。

  Complex HFirst[64];

  if((strcmp(channel, "LS") == 0) || (strcmp(channel, "ls") == 0))
  {
      if(i == 1)
        chest_first(fft_input, ifft_bpsk_output, HFirst);
      .
      .
      .
  }

我之前调用了一些其他函数,它将值放入 fft_input 和 ifft_bpsk_output,它们都是具有 64 个元素的复杂数组。

【问题讨论】:

  • IFFTOutput[i].real(或.imag)为0。(或-1,除数为INT_MIN在某些平台上是另一种可能性。)令人困惑的是,整数除以0会产生到SIGFPE
  • @Daniel Fischer,您对整数除法的怪癖和导致 SIGFPE 的深刻评论值得发布。

标签: c exception floating-point coredump floating-point-exceptions


【解决方案1】:

您可能正在除以零或其他一些无意义的数字。你确定realimagIFFTOutput[i] 不是零吗?也许在之前打印出来?

【讨论】:

  • 是的,这就是问题所在,我完全错过了。我用 0 除。
【解决方案2】:

我认为这可能是除以 0 的问题,请检查您的值。

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。这是由于使用的值大于您的数据类型可以处理的值 例如。 使用大小为 10^7 的数组,而您将其定义为 int A[10^7] 这将被丢弃,因为 int 数组无法处理这么大的大小.. 所以你必须使用适当的数据类型.. 谢谢 :)

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多