常数系数

在上面的结构中,我们一直在使用未赋值的变量多项式 \(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\) 是运算中使用的变量的索引。

注:同一变量的常数系数在不同的运算和操作数 / 输出中可能不同。