到目前为止,我们一直忽略了分支和循环条件的值,只是将if语句和while语句视为两个分支之间的非确定性选择,这被称为控制不敏感分析(control-insensitive analysis)。这样的分析也被称为路径不敏感分析(path-insensitive),因为它们不区分不同路径,这些路径会执行到不同的程序点。关于分支和路径的信息对于精确性非常重要。例如,考虑以下程序:
x = input;
y = 0;
z = 0;
while (x > 0) {
z = z+x;
if (17 > y) { y = y+1; }
x = x-1;
}
基于之前的区间分析(结合widening)我们可以知道,在while循环之后,变量x的范围是$[-\infin, \infin]$,变量y的范围是$[0, \infin]$,z的范围是$[-\infin, \infin]$。然而,考虑到程序的条件控制,那么这个分析的结果非常悲观。【理想上,x是负无穷到0,y是[0,17],z是0到无穷】