我有這一段代碼C++ SIN()返回不正確的結果
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罪(角度)」則返回怪異值 - 對於角度1.51423它說,sin = 29(所以是的,我放入弧度:-))。更奇怪的是,當我嘗試「p absSin」時,它總是返回0,並且是,我在下一行,所以「float absSin = abs(sin(angle))」行已經完成。 原來這裏甚至沒有包含cmath,但是M_PI常量返回了正確的值,儘管我在.cpp文件的開頭添加了#include以確保但沒有任何更改。
如果有幫助,即時通訊使用Linux內核2.6.26-2-xen-amd64 任何想法?
當罪產量東西> 1,則事情是真的* *打破了您的設置。也許有人寫了一個隱藏原始函數的自己的sin函數?你可以在你的對象和庫文件上使用`nm`來搜索違規文件。 – Rudi 2011-02-05 10:40:35