Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;sin()返回不正确的结果_C++_Trigonometry - Fatal编程技术网

C++ C++;sin()返回不正确的结果

C++ C++;sin()返回不正确的结果,c++,trigonometry,C++,Trigonometry,我有这段代码 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-

我有这段代码

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;
}
bool位置::HasInLine(常量单位*常量目标、浮点距离、浮点宽度)常量
{
如果(!HasInArc(M_PI,target)| |!target->iswithint3d(M_positionX,M_positionY,M_positionZ,distance))
返回false;
宽度+=目标->GetObjectSize();
浮动角度=GetRelativeAngle(目标);
浮动absSin=abs(sin(角度));
返回abs(sin(角度))*GetExactDist2d(target->GetPositionX(),target->GetPositionY())
我遇到的问题是,当我调试gdb并尝试“psin(angle)”时,它返回奇怪的值——对于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
有什么想法吗?

你不应该使用晶圆厂而不是abs吗?abs接受整数并只返回整数

您不应该使用fabs而不是abs吗?abs接受整数并仅返回整数函数
abs
(定义见
cstdlib
)始终接受整数并返回整数。当处理
double
s时,您应该使用
fabs

abs
的另一个版本在
cmath
中定义(
#include
)。它重载为接受(并返回)整数和双精度


您可能希望再次检查您使用的版本。

函数
abs
(如
cstdlib
中所定义)始终采用整数并返回整数。当处理
double
s时,您应该使用
fabs

abs
的另一个版本在
cmath
中定义(
#include
)。它重载为接受(并返回)整数和双精度

您可能希望再次检查您使用的版本。

“对于角度1.51423,它表示sin=29”

这很可能是观察的错误,而不是sin函数的错误

结果应在-1到+1范围内

干杯,对于角度1.51423,它表示sin=29

这很可能是观察的错误,而不是sin函数的错误

结果应在-1到+1范围内


干杯&hth.,

当罪恶产生了大于1的东西时,你的设置中就真的有东西被打破了。也许有人写了一个自己的罪恶函数,它隐藏了原来的罪恶函数?您可以在对象和库文件上使用
nm
来搜索有问题的文件。当sin生成大于1的内容时,您的设置中确实存在问题。也许有人写了一个自己的罪恶函数,它隐藏了原来的罪恶函数?您可以在对象和库文件上使用
nm
来搜索有问题的文件。@其中的Dragonkin被重新定义,仅适用于整数。看起来您发现了问题:-)没有“abs”的代码中的sin(angle)返回正确的值(尽管在gdb中,“p sin(angle)”仍然返回奇怪的整数),立即编译最终更正:-)@Dragonkin在其中被重新定义,并且只适用于整数。好吧,看起来您发现了问题:-)没有“abs”的代码中的sin(angle)返回正确的值(尽管在gdb中“p sin(angle)”仍然返回奇怪的整数),立即编译最终更正:-)