【发布时间】:2011-02-05 10:28:16
【问题描述】:
我有这段代码
bool Position::HasInLine(const Unit * const target, float distance, float width) const
{
if (!HasInArc(M_PI, target) || !target->IsWithinDist3d(m_positionX, m_positionY, m_positionZ, distance))
return false;
width += target->GetObjectSize();
float angle = GetRelativeAngle(target);
float absSin = abs(sin(angle));
return abs(sin(angle)) * GetExactDist2d(target->GetPositionX(), target->GetPositionY()) < width;
}
我遇到的问题是,当我使用 gdb 调试并尝试“p sin(angle)”时,它返回奇怪的值 - 对于角度 1.51423,它声明 sin = 29(所以是的,我输入弧度 :-) )。更奇怪的是,当我尝试“p absSin”时,它总是返回 0,是的,我在下一行,所以“float absSin = abs(sin(angle))”行已经完成。 最初甚至没有包含 cmath,但 M_PI const 正在返回正确的值,尽管我在 .cpp 文件的开头添加了#include 只是为了确保,但没有任何改变。
如果有帮助,我正在使用 linux 内核 2.6.26-2-xen-amd64 有什么想法吗?
【问题讨论】:
-
当 sin 产生 >1 时,那么您的设置中真的出了问题。也许有人编写了自己的 sin 函数来隐藏原始函数?您可以在对象和库文件上使用
nm来搜索有问题的文件。
标签: c++ trigonometry