西尔维·博尔多;纪尧姆·梅尔昆德 计算机算术和形式证明。使用Coq系统验证浮点算法。 (英语) Zbl 1385.68001号 阿姆斯特丹:Elsevier/ISTE出版社(ISBN 978-1-78548-112-3/hbk;978-0-08-101170-6/电子书)。第xx页,第306页。(2017). 众所周知,实数有无数个,除了无数个之外,每一个都需要无限量的信息来表示它。另一方面,真正的计算机都是有限的,因此,在一台特定的计算机上只能表示有限的数。这些构成了一组有限的所谓浮点数。编程语言使用浮点数近似实数,然后使用浮点算法近似精确结果。在这种近似中,可以采用一些舍入(书中讨论了舍入的不同方法)。理想情况下,我们希望四舍五入到下一个浮点数的精确结果是算法产生的浮点数;如果不是,我们希望计算结果接近准确结果。为了处理太大而无法用任意有限个给定浮点数表示的数字,使用了一个表示正无穷大的符号,同样,负无穷大及其乘法倒数的符号(即,例如正数,非常接近于零,但太小而无法精确近似的数字)。最后,对于计算,如加正无穷大和负无穷大,有一个表达式表示对结果一无所知。这一切都是在IEEE-754规范的不同抽象级别上规定的。可能最简单的例子是计算两个(正)实数的平均值,这说明了这种方法的一个问题。标准的数学方法——将两个数字相加,然后将总和除以二——存在这样一个问题:对于两个与小于无穷大的最大可代表数字足够接近的数字,总和可能会变成无穷大。这意味着,尽管始终存在一个完美的平均值近似值,但此算法不会始终找到它,但结果可能溢出。将两个数字减半并相加可以避免溢出问题,但如果数字太接近零,则可能会出现下溢问题。答案是将差值的一半加到较小的数字上。这为所有正浮点数提供了正确的算法。纯数学中已知的许多公式和算法在浮点运算中都是不正确的,而且众所周知,浮点计算可能会给出完全错误的答案。有时,算法可以得到改进(如上面的例子所示),有时,我们所能希望的最好结果就是限制误差。关于算法的正确性或最大可能误差的争论往往非常困难,而且很容易出错。为了防止错误,作者采用了使用形式化系统的方法,即交互式证明开发环境Coq。多年来,他们使用并扩展了该系统,以便正式证明许多关于浮点运算的语句。这本书不仅为读者提供浮点算法的解释和Coq系统的介绍,而且还提供了支持用户的自动化方法(例如区间算法和使用Gappa工具进行的细化)。有很多很有启发性的例子,比如泰勒级数和Heron公式,来计算三角形的面积,仅举两个例子。作者提供了大量详细信息,讨论了与IEEE-754中的规范相比,C程序是否确实给出了正确的答案。不仅需要证明程序的正确性,还需要证明程序编译正确。为此,必须使用经过认证的编译器(这不仅仅是一个理论问题,因为使用某些编译器标记可能会得到错误的结果)。书中讨论了如何对程序进行注释,然后使用一组自动化工具来支持用户,用户通常需要一些证明义务,然后才能使用Coq系统(和Coquelicot库)进行证明。还有很多话要说,但这次审查不应该太长。这本书的结构非常清晰,每一部分都以动机和预期总结开始。许多例子和插图阐明了材料,因此这本书具有很高的可读性。我认为它将成为任何对浮点数和相应算法感兴趣的人的标准参考。审核人:曼弗雷德·科伯(伯明翰) 引用于10文件 MSC公司: 68-02 与计算机科学有关的研究博览会(专著、调查文章) 65克50 舍入误差 6504年 计算机算术的数值算法等。 60年第68季度 规范和验证(程序逻辑、模型检查等) 68吨15 定理证明(演绎、解析等)(MSC2010) 关键词:浮点运算;形式证明;程序验证;Coq公司 软件:加帕;科奎利科;Coq公司 PDF格式BibTeX公司 XML格式引用 \textit{S.Boldo}和\textit{G.Melquiond},计算机算术和形式证明。使用Coq系统验证浮点算法。阿姆斯特丹:Elsevier/ISTE出版社(2017;Zbl 1385.68001) 全文: 链接