C/C++ 代码 2nd = 登录操作

C/C++ code 2nd = sign in operation

本文关键字:登录 操作 2nd 代码 C++      更新时间:2023-10-16

我不确定这是C代码还是C++代码,但我认为这并不重要。

在此代码中:

x -= (t = u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x)))));

T = U是什么意思? 它不是分配给你吗?因为它没有意义,因为它实际上在上一行中设置为其他内容:

t = exp(a1*log(x)+b1*log(1.-x) + afac);
u = err/t;
x -= (t = u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x)))));
if (x <= 0.) x = 0.5*(x + t);
if (x >= 1.) x = 0.5*(x + t + 1.);

T = U是什么意思?

它是一个更大的子表达式的一部分,

t = u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x))))

它不是分配给你吗?

不,它是将该复杂表达式的值分配给t。然后,该赋值的结果将用于完整表达式:

x -= (t = <stuff> );

从概念上讲,这与

t = <stuff>
x = x - t
因为它

没有意义,因为它实际上在上一行中被设置为其他内容

坦率地说,整套陈述对我来说没有意义。无论如何,t在第 1 行中设置,在第 2 行中使用,并在第 3 行中再次设置。

很简单

x -= (t = u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x)))));
|     |   _____________________________________/|
|     |        Calculate this monstrosity        |
|     _________________________________________/|
|                   Assign it to t               |
________________________________________________/
                  Subtract that from x

在C(和类C语言(中,赋值的"结果"可以用于其他事情。因此,例如:

x = (a = a - 1);   // decrements a and assigns that to x as well
x += (a = 1 - a);  // toggles a between 1 and 0 and adds to x (x increases
                   //   every second time).

C标准的相关位C11, 6.5.16 Assignment operators, paras 2 and 3

2/赋值运算符应有一个可修改的左操作数。

3/赋值运算符将值存储在由左操作数指定的对象中。赋值表达式在赋值后具有左操作数的值,但不是左值。赋值表达式的类型是左操作数的类型,除非左操作数具有限定类型,在这种情况下,它是左操作数类型的非限定版本。更新左操作数的存储值的副作用在左操作数和右操作数的值计算之后排序。操作数的计算是无序的。

在 C 和 C++ 中,赋值返回一个值,即左侧的值。

a = 1 + (b = 4);

相当于:

b = 4;
a = 1 + b;

所以:

x -= (t = u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x)))));

与以下相同:

t = u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x))));
x -= t;

在你的代码中:

  x -= (t = u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x)))));

让我假设

  A=(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x))));

然后该代码将变为

  x -= (t = u/A);

然后它可以读作:

  t = u/A;
  x -= t;

如果您有任何问题,请随时提问。

使用 = 确实会分配一个值,并将返回您正在分配的值。在您的情况下,t被分配了u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x)))的结果。

整体计算:u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x))))分配给t,并且t的值是多少,都会执行。

x=x-t

该语句可以分为两个子语句,为了可读性,它可能应该。

t = u/(1.-0.5*MIN(1.,u*(a1/x - b1/(1.-x))));
x -= t;

从本质上讲,作者将整个公式的一个子部分分配给一个中间变量(t(供以后使用。