一句话:提出链条件引导搜索触发浮点误差的输入,实现工具FPCC,显著优于ATOMU。
浮点运算的舍入误差会传播累积,导致不可接受的结果,检测能触发显著误差的输入对数值程序可靠性至关重要。现有方法依赖高精度计算的影子执行或存在假阳性。本文提出链条件来刻画浮点误差的传播与累积,并以此引导搜索触发误差的输入,实现了工具FPCC。在GNU科学库的88个函数及21个多输入函数上评估:FPCC报告的rank-1输入100%触发显著误差,而ATOMU仅72.69%;总体99.64%(1049/1053)的输入触发显著误差,ATOMU仅19.45%(141/723);检测速度提升2.17倍,且在多输入函数上优于现有技术。
Floating-point arithmetic is notorious for its rounding errors, which can propagate and accumulate, leading to unacceptable results. Detecting inputs that can trigger significant floating-point errors is crucial for enhancing the reliability of numerical programs. Existing methods for generating error-triggering inputs often rely on costly shadow executions that involve high-precision computations or suffer from false positives. This paper introduces chain conditions to capture the propagation and accumulation of floating-point errors, using them to guide the search for error-triggering inputs. We have implemented a tool named FPCC and evaluated it on 88 functions from the GNU Scientific Library, as well as 21 functions with multiple inputs from previous research. The experimental results demonstrate the effectiveness and efficiency of our approach: (1) FPCC achieves 100% accuracy in detecting significant errors for the reported rank-1 inputs, while 72.69% rank-1 inputs from the state-of-the-art tool ATOMU can trigger significant errors. Overall, 99.64% (1049/1053) of the inputs reported by FPCC can trigger significant errors, whereas only 19.45% (141/723) of the inputs reported by ATOMU can trigger significant errors; (2) FPCC exhibits a 2.17x speedup over ATOMU in detecting significant errors; (3) FPCC also excels in supporting functions with multiple inputs, outperforming the state-of-the-art technique. To facilitate further research in the community, we have made FPCC available on GitHub at https://github.com/DataReportRe/FPCC .
@article{YiYCM024,
title = {FPCC: Detecting Floating-Point Errors via Chain Conditions},
author = {Xin Yi and Hengbiao Yu and Liqian Chen and Xiaoguang Mao and Ji Wang},
journal = {Proceedings of the ACM on Programming Languages},
volume = {8},
number = {OOPSLA2},
year = {2024},
doi = {10.1145/3689764}
}