常数系数
在上面的结构中,我们一直在使用未赋值的变量多项式 \(1\) 或 \(0\) 的求值来表示变量是否在运算中被使用。自然,我们也可以使用包括负系数在内的其他系数,因为我们可以对多项式进行插值来经过任何必要的点(假设没有两个运算占用相同的 \(x\))。此类运算的示例如下:
$$\color{ForestGreen}{2a}\quad \times \quad\color{blue}{1b}\quad = \quad\color{red}{3r}$$
$$\color{ForestGreen}{-3a}\quad \times \quad\color{blue}{1b}\quad = \quad\color{red}{-2r}$$
现在我们的程序就可以使用常数系数了,例如:
算法 2:常数系数
function calc(w, a, b)
if w then
return 3a * b
else
return 5a * 2b
end if
end function
这些系数将在设置阶段「硬编码」,类似于 \(1\) 或 \(0\) 而且是不可变的。我们可以相应修改运算的形式:
$$\color{ForestGreen}{c_a \cdot a}\quad \times \quad\color{blue}{c_b \cdot b}\quad = \quad\color{red}{c_r \cdot r}$$
或者更正式地说,对于变量 \(v_i \in \{v_1, v_2, ..., v_n\}\):
$$\color{ForestGreen}{c_l \cdot v_l}\quad \times \quad\color{blue}{c_r \cdot v_r}\quad = \quad\color{red}{c_o \cdot v_o}$$
其中 \(l, r, o\) 是运算中使用的变量的索引。
注:同一变量的常数系数在不同的运算和操作数 / 输出中可能不同。