警告C4244:'论证' :转换为' double'到了“浮动”,可能会丢失数据 - c ++

时间:2015-04-18 13:06:56

标签: c++ arguments double

我昨天遇到了这个问题并且无法修复它。 所以,如果你能帮助我,我会很高兴。

所以我收到了这个错误:

warning C4244: 'argument' : conversion from 'double' to 'float', possible loss of data

来自这两行

angles[0] = (float)(atanf(delta[2] / hyp) * 57.295f - MyPunch[0] * 2);
angles[1] = (float)(atanf(delta[1] / delta[0]) * 57.295f - MyPunch[1] * 2);

代码的其余部分;

void calcang(float *src, float *dst, float *angles)
{
    float MyPunch[2];
    Lokalitetstjeneste.GetPunch(MyPunch);
    double delta[3] = { (src[0] - dst[0]), (src[1] - dst[1]), (src[2] - (dst[2] - 61)) };
    double hyp = sqrt(delta[0] * delta[0] + delta[1] * delta[1]);
    angles[0] = (float)(atanf(delta[2] / hyp) * 57.295f - MyPunch[0] * 2);
    angles[1] = (float)(atanf(delta[1] / delta[0]) * 57.295f - MyPunch[1] * 2);
    angles[2] = 0.0f;

    if (delta[0] >= 0.0)
    {
        angles[1] += 2.0f;
    }
}

1 个答案:

答案 0 :(得分:3)

deltahyp是双倍的,除法的结果是双精度,atanf取浮点数,这是错误的来源。

我会将atanf更改为atan或以双倍的方式执行所有操作。 Double有大约16位有效数字,仅浮动约7