楼层功能返回EXC_BAD_ACCESS

时间:2010-05-27 18:39:23

标签: c++ floor

我使用的鳕鱼包含这些代码片段。我用参数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);
}

1 个答案:

答案 0 :(得分:1)

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

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