0

我正在使用的 cod 包含这些代码片段。我用参数 2455343.50000 调用 ThetaG_JD,这只是一个儒略日期示例。每次我运行程序时,我都会在指定的行上收到一个 EXC_BAD_ACCESS。当使用 gdb 并打印出中间值并将它们传递给 floor 函数时,我没有收到任何错误,但是当使用 Frac() 时,它总是返回错误。

double Frac(double arg)
{
    /* Returns fractional part of double argument */
    return arg - floor(arg);
}

double ThetaG_JD(double jd)
{
    /* Reference:  The 1992 Astronomical Almanac, page B6. */

    double UT=0, TU=0, GMST=0;
    //THIS LINE
    UT=Frac(jd+0.5);
    // THAT ONE ^^
    jd=jd-UT;
    TU=(jd-2451545.0)/36525;
    GMST=24110.54841+TU*(8640184.812866+TU*(0.093104-TU*6.2E-6));
    GMST=Modulus(GMST+secday*omega_E*UT,secday);

    return (twopi*GMST/secday);
}
4

1 回答 1

1

EXC_BAD_ACCESS 让我有些费解,但这听起来有点像浮点异常。已经有一段时间了,但我记得在 x87 硬件上,您可以生成溢出/下溢/NaN,并且处理器不会让您知道异常,直到下一个FP 操作可能位于代码的完全不同部分。您可以尝试类似jd += 0.5的方法,而不是调用 Frac,看看它是否仍然死亡。

此外,x87 状态寄存器将能够向您显示是否存在错误状态,您应该能够在 gbd 中看到它。

于 2010-05-28T14:19:28.317 回答