C++ 角弧度误差

C++ 角弧度误差,c++,math,geometry,C++,Math,Geometry,我自己编写了一个小函数,可以将角度转换为弧度: double toRadians(const double &angle){ double radianangle = (double)(angle * M_PI) / 180; return radianangle; } 使用这个方法很好,但是我发现了一个问题。快速测试表明这并不完全准确,以下是我所做的: const double angle = 90; double delta = toRadians(angle);

我自己编写了一个小函数,可以将角度转换为弧度:

double toRadians(const double &angle){
    double radianangle = (double)(angle * M_PI) / 180;
    return radianangle;
}
使用这个方法很好,但是我发现了一个问题。快速测试表明这并不完全准确,以下是我所做的:

const double angle = 90;
double delta = toRadians(angle);
cout << "delta: " << delta << endl;
cout << "cosinus: " << cos(delta) << endl;
cout << "sinus: " << sin(delta) << endl;

虽然在这种情况下为窦房结给出了正确的值,但显然有些地方出了问题,因为
cos(Pi/2)
应该仅为0。这个不准确的地方把我的整个图形引擎都搞砸了,所以我想找到一种方法来解决这个问题

使用浮点数时,您总是使用公差

而不是
if(someDouble==0.0)
你可以
if(fabs(someDouble)

而不是
if(someDouble==someOtherDouble)
你可以
if(fabs(someDouble-someOtherDouble)

EPSILON
应足够小以获得良好的精度,并足够大以考虑浮点不精确性,例如
constexpr const double EPSILON=0.0001


请参阅:

使用浮点数时,您总是使用公差

而不是
if(someDouble==0.0)
你可以
if(fabs(someDouble)

而不是
if(someDouble==someOtherDouble)
你可以
if(fabs(someDouble-someOtherDouble)

EPSILON
应足够小以获得良好的精度,并足够大以考虑浮点不精确性,例如
constexpr const double EPSILON=0.0001


请参阅:

6.12323e-17
视为0。您正在处理的是
double
。我非常怀疑6e-17和0之间的差异是否会“破坏[您的]整个图形引擎”。问题在于试图寻找更大/更小的值。如果它将给出0,那么显然它将被标识为相等。然而,这计算出的差异类似于4.2e-20。这些不是我可以使用的值。
6.12323e-17
是0.000000000000000061233。这可能导致问题的唯一方法是,如果您直接比较浮点数,那么首先不应该这样做。我之所以选择使用公差,是因为我的图像会根据x和y值的范围调整大小。因此,如果所有的点在0.5的差异或200的差异,他们都将得到适当的图像大小。考虑<代码> 612323 E-17< /代码>为0。您正在处理的是
double
。我非常怀疑6e-17和0之间的差异是否会“破坏[您的]整个图形引擎”。问题在于试图寻找更大/更小的值。如果它将给出0,那么显然它将被标识为相等。然而,这计算出的差异类似于4.2e-20。这些不是我可以使用的值。
6.12323e-17
是0.000000000000000061233。这可能导致问题的唯一方法是,如果您直接比较浮点数,那么首先不应该这样做。我之所以选择使用公差,是因为我的图像会根据x和y值的范围调整大小。因此,如果所有点的差值为0.5或200,它们都会得到一个合适的图像大小。
delta: 1.5708
cosinus: 6.12323e-17
sinus: 1