Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 楼层功能返回EXC\u坏访问_C++_Floor - Fatal编程技术网

C++ 楼层功能返回EXC\u坏访问

C++ 楼层功能返回EXC\u坏访问,c++,floor,C++,Floor,我使用的cod包含这些代码片段。我打电话给Tag_JD的参数是2455343.50000,这只是一个样本儒略日期。每次运行该程序时,我都会在指示行上收到EXC_BAD_访问权限。当使用gdb并打印出中间值并通过floor函数传递它们时,我没有得到错误,但当使用Frac()时,它总是返回错误 double Frac(double arg) { /* Returns fractional part of double argument */ return arg - floor(ar

我使用的cod包含这些代码片段。我打电话给Tag_JD的参数是2455343.50000,这只是一个样本儒略日期。每次运行该程序时,我都会在指示行上收到EXC_BAD_访问权限。当使用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);
}

EXC_BAD_访问对我来说有些困惑,但这听起来像是一个可疑的浮点异常。已经有一段时间了,但正如我在x87硬件上回忆的那样,您可能会生成溢出/下溢/NaN,处理器在下一个FP操作之前不会让您知道异常情况,而下一个FP操作可能位于代码的完全不同部分。您可以尝试类似于
jd+=0.5
的方法,而不是调用Frac,看看它是否仍然死亡


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

您可以检查Frac是否定义为其他类型吗?尝试更改函数Frac的名称,看看这是否有区别?重命名函数dumbledoore仍然会产生错误,就像使用modf一样。在检查状态寄存器时,我注意到存在错误状态。我解决了这个问题,只是简单地把一个角色转换成一个int。它看起来像预期的工作。至少考虑一下错误状态是如何设置的。你可能在其他地方出现意想不到的不正确的结果。我将进一步研究这个问题,因为当程序终止时,我仍然返回一个错误。但是,我不确定该值的含义。第五位控制是否会发生精度异常。每当FPU产生不精确的结果(通常是内部舍入操作的结果)时,就会发生精度异常。尽管许多操作会产生准确的结果,但更多操作不会。例如,将1除以10将产生不精确的结果。因此,该位通常是一位,因为不精确的结果非常常见