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的算法开始。然后再从那里调整(如果需要的话)。