导致错误的双数据类型
问题描述:
我正在尝试获取帐篷方程的固定点。在给定的初始条件下,解决方案必须为0.6。当我将float用于x0时,一切正常,但是当我将x0定义为double时,解决方案在第55次迭代中变为0.59999,这会在下一次迭代中导致进一步的变化,等等。为什么选择数据类型时有这样的差异?导致错误的双数据类型
using namespace std;
#include <iostream>
main()
{
double x0=.6;
for (int i=0;i<100;i++)
{
if(x0<.5)
x0=1.5*x0;
else
x0=1.5*(1-x0);
cout << i << "\t" << x0 << endl;
}
}
我已经发布了结果图片。 Comparison of solutions - Float and Double
答
55次迭代的真正价值是0.5999994832150543633275674437754787504673004150390625
当使用double
和0.60000002384185791015625
用于float
(我的系统上)。
两者之间的差异在于数字有多精确并且舍入是什么使您抛弃。
顺便说一句,无论是两个值是绝对准确,他们只是足够接近近似,仅此而已。 double
“更精确”。
UPDATE
几点意见来回后,事实证明,没有必要进行浮点运算是杜松子酒。整数(稍微修改)做得很好和不会引入任何舍入。
你被四舍五入的欺骗。添加'cout molbdnilo
如果可能,最好将文本结果添加为文本。您附加的图像可以用您问题中的代码块文字编写。 –