Verification of programs using floating-point arithmetic is challenging on several accounts. One of the difficulties of reasoning about such programs is due to the peculiarities of floating-point arithmetic: rounding errors, infinities, non-numeric objects (NaNs), signed zeroes, denormal numbers, different rounding modes, etc. One possibility to reason about floating-point arithmetic is to model a program computation path by means of a set of ternary constraints of the form z = x op y and use constraint propagation techniques to infer new information on the variables' possible values. In this setting, we define and prove the correctness of algorithms to precisely bound the value of one of the variables x, y or z, starting from the bounds known for the other two. We do this for each of the operations and for each rounding mode defined by the IEEE 754 binary floating-point standard, even in the case the rounding mode in effect is only partially known. This is the first time that such so-called filtering algorithms are defined and their correctness is formally proved. This is an important slab for paving the way to formal verification of programs that use floating-point arithmetics.
翻译:使用浮点算术的程序的验证在若干账户上具有挑战性。 有关这种程序的推理困难之一是浮点算术的特殊性:四舍五入的错误、无限性、非数字对象(NANs)、签署的零、异常数字、不同的四舍五入模式等。 关于浮点算术的一个可能理由是,通过对表z=x oop y 的一组长期限制来模拟一个程序计算路径,并使用限制传播技术来推断关于变量可能值的新信息。在此设置中,我们定义并证明算法的正确性,以便从其他两个已知的界限开始,精确约束一个变量 x y 或 z 的价值。我们这样做是为了每个操作和IEEEE 754 的每个圆点标准定义的每个圆点模式,即使实际的圆点模式只是部分为已知。这是第一次确定这种所谓的过滤算法,并正式证明它们的正确性。这是为使用浮动点的程序的正式核实铺定了道路的重要板。