0

私が使用しているタラには、これらのコードスニペットが含まれています。ユリウス日サンプルのサンプルである引数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.5Fracを呼び出す代わりに、のようなものを試して、それがまだ死ぬかどうかを確認することができます。

また、x87ステータスレジスタはエラー状態があるかどうかを表示できるようになり、gbd内でそれを確認できるはずです。

于 2010-05-28T14:19:28.317 に答える