非常に単純に:
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/ 代入演算子は、左オペランドで指定されたオブジェクトに値を格納します。代入式には、代入後の左オペランドの値がありますが、左辺値ではありません。代入式の型は、左側のオペランドが修飾された型を持たない限り、左側のオペランドの型です。修飾された型の場合は、左側のオペランドの型の非修飾バージョンです。左オペランドの格納された値を更新する副作用は、左オペランドと右オペランドの値の計算の後に順序付けられます。オペランドの評価は順不同です。