我昨天遇到了这个问题并且无法修复它。 所以,如果你能帮助我,我会很高兴。
所以我收到了这个错误:
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;
}
}
答案 0 :(得分:3)
delta
和hyp
是双倍的,除法的结果是双精度,atanf
取浮点数,这是错误的来源。
我会将atanf
更改为atan
或以双倍的方式执行所有操作。 Double有大约16位有效数字,仅浮动约7