Eliminating Unstable Tests in Floating-Point Programs
由于实数与其浮点表示之间的差异而产生的舍入错误会导致条件浮点语句的控制流偏离实数计算的理想流。这个问题被称为测试不稳定性,可能导致浮点程序的计算与实数算术中的预期输出之间存在显着差异。在本文中,提出了一个正式证明的程序转换,以检测和纠正不稳定的测试的影响。这个转换的输出是一个浮点程序,它保证返回原始浮点程序的结果,当它可以保证它的实数流和浮点流都一致时,或者当这些流可能发散时,返回一个警告。所提出的方法是说明与变换的核心计算的多边形包容算法,在美国宇航局开发的无人驾驶飞机系统中使用的地理围栏系统。
2018-12-01 cs.LO cs.PL
Achieving High Coverage for Floating-point Code via Unconstrained Programming (Extended Version)
实现高代码覆盖率在测试中至关重要,这使我们对代码质量充满信心。测试浮点代码通常需要在处理浮点约束方面付出艰苦的努力,例如,象征性的处决本文将测试浮点代码的挑战转化为应用无约束编程的机会--在整个搜索空间上计算函数最小点的数学解决方案。我们的核心见解是从浮点程序中导出一个表示函数,其任何最小点都是一个测试输入,保证可以运行被测试程序的一个新分支。这种保证允许我们通过反复最小化表示函数来实现浮点程序的高覆盖率。我们已经在一个名为CoverMe的工具中实现了这种方法,并在Sun的C数学库上对其进行了广泛的评估。我们的评估结果表明,CoverMe平均在6.9秒内实现了90.8%的分支覆盖率,大大优于我们比较的工具:(1)随机测试,(2)AFL,Google发布的高度优化,强大的模糊器,以及(3)Austin,一种最先进的基于覆盖率的测试工具,旨在支持浮点代码。
2017-04-11 cs.PL cs.SE
Lipschitz-Based Robustness Certification Under Floating-Point Execution
University of Melbourne(墨尔本大学)
本文提出基于Lipschitz的鲁棒性认证方法,解决浮点执行与精确实数运算之间的语义差距问题,通过理论分析和实验证明其在神经网络中的有效性。
2026-07-13 cs.CV cs.LG cs.PL
Verifying Floating-Point Programs in Stainless
Uppsala University(乌普萨拉大学)
Stainless通过扩展验证器支持浮点数,实现了对Scala子集的自动验证,验证数学函数公理并验证实际实现的正确性。
2026-01-20 cs.LO cs.PL
Automatic generation and verification of test-stable floating-point code
浮点程序中的测试不稳定性发生在程序的控制流偏离其理想执行(假设为实数运算)时。这种现象是由于在条件语句中存在影响算术表达式计算的舍入错误而引起的。不稳定的测试可能会导致严重的错误,在安全关键的应用程序,依赖于数值计算。编写考虑测试不稳定性的程序是一项艰巨的任务,需要有限精度计算和舍入误差方面的专业知识。本文提出了一个工具链,自动生成和验证一个可证明正确的测试稳定的浮点程序,从一个功能规格在真正的算术。输入是用原型验证系统(PVS)规约语言编写的实值程序,输出是用ANSI/ISO C规约语言(ACSL)契约注释的转换后的浮点C程序。这些契约将浮点程序与其在实数算术中的功能规范联系起来。转换后的程序检测是否可能发生不稳定的测试,在这些情况下,发出警告并终止。提出了一种方法,它结合了框架-C分析器,PRECiSA舍入误差估计,和PVS自动验证生成的程序代码是正确的,在这个意义上说,如果程序终止没有警告,它遵循相同的计算路径作为其实值功能规范。
2020-01-07 cs.NA cs.PL math.NA
Searching input values hitting suspicious Intervals in programs with floating-point operations
University of Nice–Sophia Antipolis(尼斯-索菲亚安蒂波利斯大学)
本文提出一种基于约束的方法,用于在浮点运算误差可能引发不当行为的过估计区域中寻找测试用例,以提高程序验证的准确性。
2016-08-05 cs.DS cs.NA cs.PL
LifeJacket: Verifying precise floating-point optimizations in LLVM
优化浮点运算至关重要,因为它无处不在,成本高昂,并且用于计算繁重的工作负载。然而,正确地实现精确的优化是困难的,因为开发人员必须考虑浮点运算的所有深奥属性,以确保他们的转换不会改变程序的输出。手动推理容易出错,并且会抑制新优化的结合。我们提出了一种方法来自动推理浮点优化使用可满足性模理论(SMT)求解器。我们在LifeJacket中实现了这种方法,LifeJacket是一个自动验证LLVM汇编语言精确浮点优化的系统。我们已经使用LifeJacket验证了43个LLVM优化,并发现了8个不正确的优化,包括3个以前未报告的问题。LifeJacket是Alive系统的开源扩展,用于优化验证。
2016-03-30 cs.PL
Metamorphic Testing for Floating-Point Performance Issues in SMT Solvers
MPI-SWS(马克斯·普朗克软件系统研究所);Uppsala University(乌普萨拉大学)
本文提出一种基于语义保持重写规则的蜕变测试方法,针对SMT求解器浮点公式处理中的性能问题,在真实输入下发现简化后求解时间显著增加,最高达33.4倍。
2026-09-18 cs.PL
A Probabilistic Approach to Floating-Point Arithmetic
高精度浮点运算必然会引入舍入误差,传统上使用最坏情况分析来限制舍入误差。然而,最坏情况分析可能过于保守,因为最坏情况错误在实践中可能非常罕见。在这里,我们开发了一个概率模型的舍入误差,它变得有可能估计的可能性,舍入误差的算法位于一个给定的区间内。给定一个输入分布,我们展示了如何计算舍入误差的分布。对于低精度的算术,我们这样做,对于高精度的算术,我们得到一个简单的近似。然后,该模型是完全组合的:给定一个用简单的命令式编程语言编写的数值程序,我们可以递归地计算每一步计算中的舍入误差分布,并将其传播到每个程序指令。这是通过应用最初由Kozen开发的形式主义来形式化概率程序的语义。然后,我们讨论了该模型的实现,并使用它来执行概率范围分析的一些基准。
2019-12-10 cs.NA cs.PL math.NA
Floating-Point Usage on GitHub: A Large-Scale Study of Statically Typed Languages
Uppsala University(乌普萨拉大学)
本文通过大规模研究GitHub仓库中的浮点数使用,揭示了现实世界中浮点数运算的广泛应用,并发布数据集以帮助改进自动推理技术。
2026-03-10 cs.PL cs.SE
The pitfalls of verifying floating-point computations
针对关键系统中浮点计算验证的难题,本文通过具体示例揭示语义受编译器等因素影响的陷阱,并提出分析软件中的解决方案。
2008-05-22 cs.NA cs.PL math.NA
Augmented Weak Distance for Fast and Accurate Bounds Checking
本研究提出增强弱距离(AWD)框架,通过单调收敛条件和逐路径分析解决原有WD框架的优化病态问题,在SV-COMP 2024边界检查基准上准确率达100%且速度较CBMC快170倍,为浮点程序验证提供高效精确的新方案。
2025-05-20 cs.PL
Synthesizing Backward Error Bounds, Backward
Cornell University(康奈尔大学)
本文提出一个形式框架,用于对广泛数值程序进行可靠的自动后向误差分析。通过扩展后向稳定性定义,开发了Shel类别,并实现工具eggshel自动证明程序的后向稳定性。
2026-04-17 cs.PL
Towards Fixed-Point Formats Determination for Faust Programs
针对可编程数字信号处理中手动定义定点格式负担重的问题,本文回顾现有自动定点格式确定方法,并描述评估了Faust编译器中该功能的原型实现。
2024-03-11 cs.PL
Accurate Residues for Floating-Point Debugging
University of Utah(犹他大学)
本文提出一种改进方法,通过将余数计算分为两个步骤并优化算法,提高浮点数调试的准确性同时保持效率,减少误报并处理复杂数值问题。
2026-09-02 cs.MS cs.NA cs.PL
Floating-Point Neural Networks Are Provably Robust Universal Approximators
GIST, Gwangju, Republic of Korea(韩国全州科学技术大学);POSTECH, Pohang, Republic of Korea(韩国釜山科学技术大学);Sejong University, Seoul, Republic of Korea(首尔世宗大学);Korea University, Seoul, Republic of Korea(韩国大学);Carnegie Mellon University, Pittsburgh, PA, USA(卡内基梅隆大学)
本文证明了浮点神经网络在有限精度下仍能以任意精度近似目标函数,揭示了其在表达能力和计算完备性上的独特性质。
2025-07-30 cs.LG cs.LO cs.PL
Satire: Computing Rigorous Bounds for Floating-Point Rounding Error in Mixed-Precision Loop-Free Programs
本文提出工具Satire,通过抽象引导优化和全局误差分析,为含条件语句与混合精度算术的无循环程序计算严格浮点舍入误差界限,并展示其在共轭梯度求解器设计中的应用。
2025-03-07 cs.NA cs.PL cs.SC
Checking Robustness against TSO
我们提出的算法检查和执行的并发程序对总存储排序(TSO)内存模型的鲁棒性。一个程序是健壮的,如果它的所有TSO计算对应于顺序一致性(SC)语义下的计算。我们提供了一个完整的非鲁棒性的特征,在所谓的攻击:(有害的)程序的顺序执行的限制形式。然后,我们发现,检测攻击可以并行化,并可以解决SC语义下使用状态可达性查询在一个适当的仪表程序获得的线性大小的源到源的翻译。重要的是,该构造对于任意数量的地址和任意数量的并行线程都是有效的,并且它独立于数据域和TSO语义中的存储缓冲区的大小。特别是,当数据域是有限的,地址的数量是固定的,我们得到的鲁棒性的可判定性和复杂性的结果,即使是任意数量的线程。作为第二个贡献,我们提供了一个算法来计算一组最佳的围栏,执行鲁棒性。我们考虑两个标准的最优性:最小化的程序大小和最大化的性能。我们定义的算法被实现,并成功地应用于分析和纠正几个并发算法。
2012-10-29 cs.PL
A Categorical Basis for Robust Program Analysis
Princeton University(普林斯顿大学)
本文提出一个范畴框架,用于统一描述程序分析的鲁棒性,通过将程序和属性建模为范畴中的对象,将不同鲁棒性概念表示为结构保持的函子,并提供实现鲁棒性的方法。
2026-04-13 cs.PL
On Dynamic Flow-Sensitive Floating-Label Systems
用于信息流控制(IFC)的流敏感分析允许数据结构具有可变的安全标签,即,标签可以在计算过程中改变。这个特性通常用于提高IFC监视器的权限,通过拒绝更少的程序运行,并减少显式标签注释的负担。然而,添加流动敏感的构建体(例如,引用或文件)到动态IFC系统是微妙的,并且还可能引入高带宽隐蔽信道。在这项工作中,我们扩展LIO-一个基于语言的浮动标签系统-与流敏感的引用。安全操作引用的标签的关键在于不仅要考虑存储在引用中的数据上的标签,即,参考标签,以及参考标签本身上的标签。考虑到这一点,我们提供了一个升级原语,可以用来以安全的方式更改引用的标签。我们还提供了一种自动升级机制,以消除确定何时应该升级引用的负担。这种方法自然地扩展到并发设置,这是以前没有考虑过的动态流敏感系统。对于我们的顺序和并发结石,我们证明不干扰嵌入到原来的流量敏感系统,流量不敏感LIO演算-一个令人惊讶的结果本身。
2015-07-22 cs.CR cs.PL
Robustness Against Transactional Causal Consistency
本文研究因果一致性变体间关系,证明无写写竞争的程序行为一致,并将鲁棒性检查多项式归约为状态可达性问题,为并发程序验证工具用于因果一致性数据库铺路。
2021-02-02 cs.PL
Dynamic Robustness Verification Against Weak Memory (Extended Version)
针对标准动态竞态检测与弱内存模型不兼容的问题,提出基于位置时钟的动态鲁棒性验证算法,并在工具RSAN中实现,实现对弱内存的有效防御。
2025-04-21 cs.PL
Automatic Modular Abstractions for Linear Constraints
提出了一种通过抽象解释自动生成用于静态分析的抽象Transformers的方法。该方法的重点是对程序的线性约束,操作合理的,真正的或浮点变量,并包含线性分配和测试。除了无循环代码,同样的方法也适用于获得最小不动点作为前提条件的函数,这允许分析循环和递归函数。我们的算法是基于新的量词消去和符号操作技术。给定一个抽象域的规范和一个程序块,我们的方法自动输出相应的抽象Transformer的实现。因此,它是程序转换的一种形式。我们工作的动机是数据流同步程序设计语言,用于构建控制命令嵌入式系统,但它也适用于命令式和函数式编程。
2008-11-02 cs.LO cs.PL
Automatic modular abstractions for template numerical constraints
提出了一种通过抽象解释自动生成用于静态分析的抽象Transformers的方法。该方法的重点是对程序的线性约束,操作合理的,真正的或浮点变量,并包含线性分配和测试。除了无循环代码,同样的方法也适用于获得最小不动点作为前提条件的函数,这允许分析循环和递归函数。我们的算法是基于新的量词消去和符号操作技术。给定一个抽象域的规范和一个程序块,我们的方法自动输出相应的抽象Transformer的实现。因此,它是程序转换的一种形式。我们工作的动机是数据流同步程序设计语言,用于构建控制命令嵌入式系统,但它也适用于命令式和函数式编程。
2010-05-31 cs.LO cs.PL
Quantitative Robustness Analysis of Quantum Programs (Extended Version)
量子计算是一个最近非常感兴趣的话题,研究和工业都取得了实际进展。量子编程的一个主要挑战是处理执行过程中的错误(量子噪声)。因为量子资源(例如,量子位)是稀缺的,应用于体系结构级的经典纠错技术目前成本过高。但是,尽管这一现实意味着量子程序几乎肯定会有错误,但目前还没有原则性的方法来推理错误行为。本文试图填补这一空白,开发一个语义错误的量子while程序,以及对他们的推理逻辑。这种逻辑允许证明我们已经确定的属性,称为$ε$ -鲁棒性,它表征了理想程序和错误程序之间可能的“距离”。我们已经证明了逻辑的合理性,并在几个案例研究中展示了它的实用性,特别是:(1)分析量子伯努利工厂(QBF)和量子行走(QW)的噪声版本的鲁棒性;(2)证明不同纠错方案对单量子比特错误的有效性;(3)分析QBF容错版本的鲁棒性。
2018-12-01 cs.PL quant-ph
Automatic Modular Abstractions for Template Numerical Constraints
提出了一种通过抽象解释自动生成用于静态分析的抽象Transformers的方法。该方法的重点是对程序的线性约束,操作合理的,真正的或浮点变量,并包含线性分配和测试。给定一个抽象域的规范和一个程序块,我们的方法自动输出相应的抽象Transformer的实现。因此,它是程序转换的一种形式。除了无循环代码,同样的方法也适用于获得最小不动点作为前提条件的函数,这允许分析循环和递归函数。我们工作的动机是数据流同步程序设计语言,用于构建控制命令嵌入式系统,但它也适用于命令式和函数式编程。我们的算法是基于线性算术公式上的量词消去和符号操作技术。我们也给出了非线性约束和非线性程序结构的一般结果。
2010-05-26 cs.LO cs.PL
Numerical Fuzz: A Type System for Rounding Error Analysis
本文提出函数式语言 $Λ_{num}$,通过线性类型与分级单子结合的类型系统定量界定浮点舍入误差,并开发原型实现,实现与现有工具相当且更快的自动化误差分析。
2025-04-08 cs.NA cs.PL math.NA