C++ c++;“数据类型”;“双”字;如何比较无理数?

C++ c++;“数据类型”;“双”字;如何比较无理数?,c++,C++,您好,我想知道是否有好的方法来比较一个“双精度”值到小数点后几位! 例如,下面是我的代码: else if (choice == 2) { srand(seed); firstVal = (rand() % (MAX_VALUE - MIN_VALUE + 1)) + MIN_VALUE; secondVal = (rand() % (MAX_VALUE - MIN_VALU

您好,我想知道是否有好的方法来比较一个“双精度”值到小数点后几位! 例如,下面是我的代码:

else if (choice == 2)
            {
                srand(seed);

                firstVal = (rand() % (MAX_VALUE - MIN_VALUE + 1)) + MIN_VALUE;
                secondVal = (rand() % (MAX_VALUE - MIN_VALUE + 1)) + MIN_VALUE;
                ans = firstVal / secondVal; //this part!

                cout << "Generating Values..";
                pause(3);
                cout << endl;

                cout << firstVal << endl;
                cout << secondVal << endl;

                cout << "Please enter the division of two Values(top value / bottom): ";
                cin >> userAns;

                if (userAns == ans) //This part!!
                    cout << "Congraturation. You got right answer" << endl;
                else
                    cout << "Wrong dummy!" << endl;

            }
else if(选项==2)
{
srand(种子);
firstVal=(rand()%(最大值-最小值+1))+最小值;
secondVal=(rand()%(最大值-最小值+1))+最小值;
ans=firstVal/secondVal;//这部分!

有一件事非常重要:计算机不理解无理数的概念

如果您需要验证一个数字是否“等于”一个“无理”数字(如
sqrt(2)
pi
),最好的办法是就精度和计算方法(绝对或相对)达成一致,并在整个应用程序中使用相同的系统

示例:以1E-12为精度,使用相对计算。然后,您可以检查一个数字(假设
双d
),如下所示:

abs((d - sqrt(2)) / sqrt(2)) <= 1E-12

有一件事非常重要:计算机不理解无理数的概念

如果您需要验证一个数字是否“等于”一个“无理”数字(如
sqrt(2)
pi
),最好的办法是就精度和计算方法(绝对或相对)达成一致,并在整个应用程序中使用相同的系统

示例:以1E-12为精度,使用相对计算。然后,您可以检查一个数字(假设
双d
),如下所示:

abs((d - sqrt(2)) / sqrt(2)) <= 1E-12

abs((d-sqrt(2))/sqrt(2))减法,然后与你的最大差值进行比较?可悲的是,无理数字是你最不担心的。
double
(和
float
)值是不精确的,因此任何
==
的应用程序都很容易失败。例如,在一侧可以有10.0000000003,而在另一侧可以有9.9999997。
double
可以表示的所有实数都是有理数。
double
s不使用“小数位”.无理数在数学中很酷,因为它们填补了令人不快的空白,但在其他任何地方几乎都没有用处。不可能以无限的精度测量某些东西。我喜欢从Knuth的算法开始。然后调整(如果需要)从那里开始。减法,然后与你的最大差值进行比较?可悲的是,不合理的数字是你最不担心的。
double
(和
float
)值是不精确的,因此任何
==
的应用程序都很容易失败。例如,在一侧可以有10.0000000003,而在另一侧可以有9.9999997。
double
可以表示的所有实数都是有理数。
double
s不使用“小数位”.无理数在数学中很酷,因为它们填补了令人不快的空白,但在其他任何地方几乎都没有用处。不可能以无限的精度来测量某些东西。我喜欢从Knuth的算法开始。然后再从那里调整(如果需要的话)。