Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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++_Double - Fatal编程技术网

C++ 导致错误的双数据类型

C++ 导致错误的双数据类型,c++,double,C++,Double,我试图得到帐篷方程的不动点。在给定的初始条件下,解必须为0.6。当我对x0使用float时,一切都很好,但是当我将x0定义为double时,在第55次迭代中,解决方案将更改为0.59999,这将导致在下一次迭代中进一步更改,以此类推。为什么在选择数据类型时会有这样的差异 using namespace std; #include <iostream> main() { double x0=.6; for (int i=0;i<100;i++) {

我试图得到帐篷方程的不动点。在给定的初始条件下,解必须为0.6。当我对x0使用float时,一切都很好,但是当我将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;

    }

}
使用名称空间std;
#包括
main()
{
双x0=.6;

对于(int i=0;i当使用
double
时,第55次迭代的实际值为
0.5999483215054363375674437754787504673040390625
,对于
float
(在我的系统上)则为
0.60000002384185791015625

两者之间的区别在于数字的精确程度,而舍入是让你感到不舒服的地方

顺便说一句,这两个值都不是绝对精确的,它们只是非常接近的近似值,仅此而已。
double
更精确


更新


经过几番反复的评论,结果证明浮点运算不需要与.integer(稍加修改)结合使用做得很好,不要引入任何舍入。

第55次迭代的实际值是
0.599999483215054336332756744377547875046733004150390625
,当使用
双精度
浮点
0.60000002384185791015625
(在我的系统上)

两者之间的区别在于数字的精确程度,而舍入是让你感到不舒服的地方

顺便说一句,这两个值都不是绝对精确的,它们只是非常接近的近似值,仅此而已。
double
更精确


更新


经过几番反复的评论,结果证明浮点运算不需要与.integer(稍加修改)结合使用做得很好不要引入任何舍入。

舍入欺骗了你。如果可能,添加
cout最好将文本结果添加为文本。你附加的图像可以写在你问题中的文本代码块中。舍入欺骗了你。添加
cout最好添加你的文本如果可能的话,将结果转换为文本。您所附的图像可以用您问题中的文本代码块来编写。谢谢。我正在尝试模拟混沌起作用的动力系统。方程对初始条件非常敏感。微小的变化可能会在未来的迭代中引起巨大的变化。有没有办法解决这个问题是问题吗?你的问题实际上取决于“这个问题”的确切定义。是因为
浮点
的行为与
双精度
不同?还是因为
双精度
的精度不足以满足您的需要?还是因为二进制数不是表示小数的好选择?我担心的是解偏离了其精确值(本例中为0.6)在某个迭代中,导致下一个迭代返回错误的解。是否有方法获得精确值(0.6)在所有的迭代中?是的,有一种方法。不要使用浮点运算。将所有东西乘以
10
,然后使用整数。简单、快速、绝对精确。太棒了!谢谢。谢谢。我正在尝试模拟混沌起作用的动力系统。方程对初始条件非常敏感。稍微改变一下就可以因为在未来的迭代中会有巨大的变化。有办法解决这个问题吗?你的问题实际上取决于“这个问题”的确切定义。是因为
浮点
的行为与
双精度
不同?还是因为
双精度
的精度不足以满足您的需要?还是因为二进制数不是表示小数的好选择?我担心的是解偏离了其精确值(本例中为0.6)在某个迭代中,导致下一个迭代返回错误的解。有没有办法在所有迭代中获得精确值(0.6)?是的,有办法。不要使用浮点运算。将所有值乘以
10
,然后使用整数。简单、快速、绝对精确。太棒了!谢谢。