ほとんどの言語では、外部式の評価の順序を言語によって指定していません。したがって、ranf(x)() が乱数ジェネレータである場合、式 ranf(x) * a + ranf(x) * b() は、2 つの ranf(x)() の呼び出しの評価順序が変更された場合、異なるコンパイラでは、または同じコンパイルの異なる最適化レベルでは別々の結果を算出します。
2 つの外部参照を含む式を使用しないでください。このような式は、それぞれ含まれる外部参照を 1 つ以下にするように複数のステートメントに分割します。このため、
z = ranf(x) * a + ranf(x) * b()
は、次のコマンドに置き換えることができます。
t = ranf(x) * a()
z = t + ranf(x) * b()