浮点精度问题的处理

浮点精度问题的处理

计算时发现转换为JD值时,如2000年1月1日0点0时0分,JD值为2451545.4166707597,在还原时,变成了1999年12月31日23点59分59.999986588954926秒,这是因为浮点计算的问题导致。

通过人工修正加入一秒1/86400后,秒数变成了0.999981164932251111,换而言之,这里稳定的浮点数是0.99998这里,由于1000毫秒为1秒,而天象计算也不可能精确到这种程度,所以这里的计算可以进行简化。

故需进行浮点修正:

var xxx = Math.Round(v – Math.Floor(v), 6);
if (xxx < 0.50001)
{
        jd = v – xxx – 0.5 + 0.00001;
}
if (xxx > 0.50001)
{
          jd = Math.Floor(v) + 0.50001;
}

return jd;

三符风云涌

发表评论