Noob Here。
我有一个问题,我必须将输出舍入到4位小数,并且我得到奇怪的返回值。
我正在使用它,所有变量都是double或int,因为精确度是次要的,它可以半精确地工作。
//Rounds Input to 4 decimal places
double round(double initial)
{
int newInitial = (initial * 10000);
double round = newInitial / 10000;
return round;
}
这将返回0.781623 ...- 1311&行的值。 2.25194111-3
我必须找到2个东西,“vectorC”的正弧度角和从坐标平面的原点保存的距离,通过在其他2个其他人创建的路径上跟随一个直接矢量C,vectorA + vectorB。
最初我遇到了这个问题,我的函数在这里找到了弧度角:
/*Finds Positive Radian Angle of Vector C by using inverse tangent given x and y dimensions. Using Pi at 11 decimals.
*/
double angle(int x2,int y2)
{
double pi = 3.14159265359;
double vAngle = atan(y2 / x2);
if (x2 < 0 && y2 > 0)
{
vAngle = pi + vAngle;
}
if (x2 < 0 && y2 < 0)
{
vAngle = pi + vAngle;
}
if (x2 < 0 && y2 < 0)
{
vAngle = (2 * pi) + vAngle;
}
return vAngle;
}
我在想它的原因是因为小数长度要加倍,但我也在这里遇到了这个问题:
//Uses distance formula to find the Magnitude of a "Vector" from Coordinates (x1,y1) to (x2,y2)
double distance(double x1,double y1,double x2,double y2)
{
double vDistance = sqrt((pow(x2 - x1, 2) + pow(y2 - y1, 2)));
return vDistance;
}
我有点失落。我知道数学是正确的,但我的实现在某个地方打破了。任何帮助都会很棒。
编辑:好的,所以看起来我的功能在四舍五入之前就已经破了。以下是一个例子。可以说我们有3分。 (0,0)(1,1)(1,-3)
Vector A from (0,0)->(1,1) has distance sqrt(2) aprox ~ 1.4142
Vector B from (1,1)->(1,-3) has distance 2
Vector C from (0,0)->(1,-3) has distance sqrt(10) aprox ~ 3.1623
当使用distance()查找值时,它返回1.4142143.16228-1,3.16228,2113-3。所以我的距离函数或传递的数字都有问题,但传递的数字是整数倍。不知道为什么第一个答案会以2位小数的形式返回
然后使用我的角度函数,角度应为x = arctan(-3/1)= 5.0341。相反,我只得到-1。如果需要,我可以发布整个程序。
EDIT2:所以错误发生在我的舍入甚至发生之前我正在考虑它的原因我使用double而不是浮动也许?我有两个不同的功能,并且在我通过我的圆函数传递之前都打印出一个奇怪的结尾。再次使用xy(0,0),v1xy(1,1),v2xy(1,-3)
//Uses distance formula to find the Magnitude of a "Vector" from Coordinates (x1,y1) to (x2,y2)
double distance(double x1,double y1,double x2,double y2)
{
double vDistance = sqrt((x2 - x1)*(x2 - x1) + (y2-y1)*(y2-y1));
return vDistance;
}
所有三个都打印出来:
cout << vectorA <<endl<< vectorB <<endl<< vectorC<<endl;
前两个问题的答案是正确的,但是第三个问题的答案是错误的,并且-3卡在上面。这里: https://gyazo.com/343ec1eaddb45cc7abd160ab7ac39a5d
然后评论出来并只检查角度:
/*Finds Positive Radian Angle of Vector C by using inverse tangent given x and y dimensions. Using Pi at 11 decimals.
*/
double angle(int x2,int y2)
{
double pi = 3.14159265359;
double vAngle = atan(y2 / x2);
if (x2 < 0 && y2 > 0)
{
vAngle = pi + vAngle;
}
if (x2 < 0 && y2 < 0)
{
vAngle = pi + vAngle;
}
if (x2 < 0 && y2 < 0)
{
vAngle = (2 * pi) + vAngle;
}
return vAngle;
}
给了我类似的结果: https://gyazo.com/db19c0263a45543653e1d9549a4dd50b