я этот кусок кодаC++ грех() возвращает неверные результаты
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 и попытаться «р sin (угол)» возвращает странные значения - для угол 1.51423 он утверждает, что sin = 29 (так что да, я вкладываю в радианы :-)). Более странно то, что когда я пытаюсь «p absSin», он всегда возвращает 0, и да, я был на следующей строке, поэтому строка «float absSin = abs (sin (angle)) уже была выполнена. В оригинале не было даже cmath, но M_PI const возвращал правильное значение, хотя я добавил #include в начале файла .cpp, чтобы убедиться, но ничего не изменилось.
Если это помогает, им с использованием ядра linux 2.6.26-2-xen-amd64 Любые идеи?
когда дает грех что-то> 1, то что-то * действительно * сломана в вашей установке. Может, кто-то написал собственную функцию греха, которая скрывает оригинальную? вы можете использовать 'nm' в ваших объектных и библиотечных файлах для поиска файлов-нарушителей. – Rudi