Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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++_Precision_Trigonometry_Degrees - Fatal编程技术网

C++中三角计算的精度与舍入

C++中三角计算的精度与舍入,c++,precision,trigonometry,degrees,C++,Precision,Trigonometry,Degrees,计算旋转矩形边界框的左上角,例如,我试图根据旋转角度采取不同的行动,以确定象限0..90°..180°..270°..360°,以度为单位。 将角度转换为弧度,以便与PI进行比较: // http://codepad.org/zCxKJy30 #include <iostream> #include "math.h" using namespace std; int main() { float deg = 90.0; float rad = deg / 360

计算旋转矩形边界框的左上角,例如,我试图根据旋转角度采取不同的行动,以确定象限0..90°..180°..270°..360°,以度为单位。 将角度转换为弧度,以便与PI进行比较:

// http://codepad.org/zCxKJy30

#include <iostream>
#include "math.h"

using namespace std;

int main()
{
    float deg = 90.0;
    float rad = deg / 360.0 * 2.0 * M_PI;

    if( rad <= M_PI/2.0)
    {
        cout << "less or equal";
    }
    else
    {
        cout << "larger";
    }
    return 0;
}
我希望这个条件是正确的,但事实并非如此

我想知道是否有一个简单的解决方案,不像和建议

我刚刚尝试使用双精度类型,然后比较工作如预期:


为什么提高精度会导致正确的评估?

可能是重复的?我不会用一个10英尺长的杆子来处理数学问题,但我强烈怀疑你没有意识到浮点类型实际上有多有限……你使用的是双精度常数和算术,但四舍五入到单精度。使用双精度遍历似乎给出正确的结果:请考虑,既不是数学.h也不是MyPI是标准C++。它的值是在度,为什么你不能把它与90度比较?是的,正如前面提到的,由于计算过程中的舍入,现在强烈建议不要使用浮动。使用双精度或定点计算。是的,请记住,任何浮点值实际上都不能进行严格的比较,任何特定的浮点值实际上意味着它到达某个间隔,但不等于某个值。