我想直接谈谈术语。考虑:
for (double d = 0.0; d != 1.0; d += 0.1)
cout << d << " ";
如果我理解正确的话,由于二重算术是不精确的,这个循环可以是有限的,也可以是无限的。这被认为是未指明或未定义的行为吗?
程序的行为是由实现定义的:不同的实现可以有不同的行为,但它们必须记录它。这与未指定的行为(无需记录(和未定义的行为(任何事情都会发生(不同。另请参见未定义、未指定和实现定义的行为。
CCD_ 1的通用实现方式由IEEE754定义。如果您的实现遵循该标准,那么该循环将始终恢复相同的输出。
在IEEE754下,您的循环是无限的——您将跳过1.0
,最终d
将增长到添加0.1
是不可行的大小。