C++ 为什么这些源代码(C+;+;)提供了不同的化学反应结果?

C++ 为什么这些源代码(C+;+;)提供了不同的化学反应结果?,c++,c++14,C++,C++14,当我在Linux、Windows和在线编译器上运行这些源代码时,它总是提供不同的结果,但我认为这两个源代码是相同的。请描述关于这些代码的任何想法 第一个代码: #include<iostream> using namespace std; int main() { double a=100.0,b=50.0,c=0.0,da,db,dc; double k1=0.008,k2=0.002,delta=0.1,T=5.0,t,time=0.0; int N;

当我在Linux、Windows和在线编译器上运行这些源代码时,它总是提供不同的结果,但我认为这两个源代码是相同的。请描述关于这些代码的任何想法

第一个代码:

#include<iostream>
using namespace std;
int main()
{
    double a=100.0,b=50.0,c=0.0,da,db,dc;
    double k1=0.008,k2=0.002,delta=0.1,T=5.0,t,time=0.0;
    int N;
    t=(T/delta);
    N=(int)t;
    cout<<"Time"<<"\t"<<"A"<<"\t"<<"B"<<"\t"<<"C"<<"\t\n";
    cout<<time<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t\n";
    for(int i=0;i<N;i++)
    {
        //Look the below line
        a=a+(k2*c-k1*a*b)*delta;
        b=b+(k2*c-k1*a*b)*delta;
        c=c+(2*(k1*a*b-k2*c))*delta;

        time+=delta;
        cout<<time<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t\n";
    }
    return 0;

}

请注意,在第一个清单中,当您给b一个新值时,a的值已经改变

a=a+(k2*c-k1*a*b)*delta; //a is now different
b=b+(k2*c-k1*a*b)*delta;
             ^ now different
在第二个清单中,da、db和dc基于a、b和c的不变值进行计算

da=k2*c-k1*a*b; 
db=k2*c-k1*a*b;
           ^ ^ Still the same.

哦,是的,非常感谢。@AshrafulHaque当变量有描述性名称时,这样的事情通常更容易发现。不要像写这段代码的人那样。采用并遵循易懂的命名方案。
a=a+(k2*c-k1*a*b)*delta; //a is now different
b=b+(k2*c-k1*a*b)*delta;
             ^ now different
da=k2*c-k1*a*b; 
db=k2*c-k1*a*b;
           ^ ^ Still the same.