Abstract
Floating-point arithmetic is a well-known and extremely efficient way of performing approximate computations over the real numbers. Although it requires some careful considerations, floating-point numbers are nowadays routinely used to prove mathematical theorems. Numerical computations have been applied in the context of formal proofs too, as illustrated by the CoqInterval library. But these computations do not benefit from the powerful floating-point units available in modern processors, since they are emulated inside the logic of the formal system. This paper experiments with the use of hardware floating-point numbers for numerically intensive proofs verified by the Coq proof assistant. This gives rise to various questions regarding the formalization, the implementation, the usability, and the level of trust. This approach has been applied to the CoqInterval and ValidSDP libraries, which demonstrates a speedup of at least one order of magnitude.





Similar content being viewed by others
Explore related subjects
Discover the latest articles, news and stories from top researchers in related subjects.Notes
For instance, the binary64 format makes room for \(2^{53}-2\) different NaN values.
The naivety of the approach can be seen in that both mantissas mx and my are aligned by shifting them left according to the smallest exponent min ex ey. A fast implementation would instead shift them right according to the largest exponent, as done in hardware. This is much trickier to get right and the improved performance is not required for our specification purpose.
The authors would like to thank Guillaume Bertholon who implemented the original version of primitive_float_infnan.
References
Armand, M., Grégoire, B., Spiwack, A., Théry, L.: Extending Coq with imperative features and its application to SAT verification. In: Kaufmann, M., Paulson, L.C. (eds.) 1st International Conference on Interactive Theorem Proving. Lecture Notes in Computer Science, vol. 6172, pp. 83–98. Edinburgh, UK (2010). https://doi.org/10.1007/978-3-642-14052-5_8
Bertholon, G., Martin-Dorel, É., Roux, P.: Primitive floats in Coq. In: Harrison, J., O’Leary, J., Tolmach, A. (eds.) 10th International Conference on Interactive Theorem Proving. Leibniz International Proceedings in Informatics, vol. 141, pp. 7–1720. Portland, OR, USA (2019). https://doi.org/10.4230/LIPIcs.ITP.2019.7
Boespflug, M., Dénès, M., Grégoire, B.: Full reduction at full throttle. In: 1st International Conference on Certified Programs and Proofs, Kenting, Taiwan, pp. 362–377 (2011). https://doi.org/10.1007/978-3-642-25379-9_26
Boldo, S., Jourdan, J.-H., Leroy, X., Melquiond, G.: A formally-verified C compiler supporting floating-point arithmetic. In: Nannarelli, A., Seidel, P.-M., Tang, P.T.P. (eds.) 21st IEEE Symposium on Computer Arithmetic, Austin, TX, USA, pp. 107–115 (2013). https://doi.org/10.1109/ARITH.2013.30
Boldo, S., Melquiond, G.: Flocq: A unified library for proving floating-point algorithms in Coq. In: Antelo, E., Hough, D., Ienne, P. (eds.) 20th IEEE Symposium on Computer Arithmetic, Tübingen, Germany, pp. 243–252 (2011). https://doi.org/10.1109/ARITH.2011.40
Boldo, S., Munoz, C.: A high-level formalization of floating-point number in PVS. Technical Report 20070003560, NASA, National Institute of Aerospace, Hampton, VA, USA (2006)
Boldo, S., Jourdan, J.-H., Leroy, X., Melquiond, G.: Verified compilation of floating-point computations. J. Autom. Reason. 54(2), 135–163 (2015). https://doi.org/10.1007/s10817-014-9317-x
Cohen, C., Dénès, M., Mörtberg, A.: Refinements for free! In: Gonthier, G., Norrish, M. (eds.) 3rd International Conference on Certified Programs and Proofs. Lecture Notes in Computer Science, vol. 8307, pp. 147–162. Melbourne, Australia (2013). https://doi.org/10.1007/978-3-319-03545-1_10
Dénès, M.: Towards primitive data types for Coq 63-bits integers and persistent arrays. In: 5th Coq Workshop, Rennes, France (2013). https://coq.inria.fr/files/coq5_submission_2.pdf
Grégoire, B., Leroy, X.: A compiled implementation of strong reduction. In: 7th ACM SIGPLAN International Conference on Functional Programming, Pittsburgh, PA, USA, pp. 235–246 (2002). https://doi.org/10.1145/581478.581501
Grégoire, B., Théry, L.: A purely functional library for modular arithmetic and its application to certifying large prime numbers. In: Furbach, U., Shankar, N. (eds.) 3rd International Joint Conference on Automated Reasoning. Lecture Notes in Computer Science, vol. 4130, pp. 423–437. Seattle, WA, USA (2006). https://doi.org/10.1007/11814771_36
Harrison, J.: A machine-checked theory of floating point arithmetic. In: Bertot, Y., Dowek, G., Hirschowitz, A., Paulin-Mohring, C., Théry, L. (eds.) 12th International Conference in Theorem Proving in Higher Order Logics. Lecture Notes in Computer Science, vol. 1690, pp. 113–130. Nice, France (1999). https://doi.org/10.1007/3-540-48256-3_9
Higham, N.: Accuracy and Stability of Numerical Algorithms. Society for Industrial and Applied Mathematics, Philadelphia, PA (1996)
IEEE Computer Society: IEEE standard for floating-point arithmetic. Technical Report 754-2008, IEEE (August 2008). https://doi.org/10.1109/IEEESTD.2008.4610935
Jeannerod, C., Rump, S.M.: On relative errors of floating-point operations: optimal bounds and applications. Math. Comput. 87(310), 803–819 (2018). https://doi.org/10.1090/mcom/3234
Martin-Dorel, É., Roux, P.: A reflexive tactic for polynomial positivity using numerical solvers and floating-point computations. In: Bertot, Y., Vafeiadis, V. (eds.) 6th ACM SIGPLAN Conference on Certified Programs and Proofs, Paris, France, pp. 90–99 (2017). https://doi.org/10.1145/3018610.3018622
Martin-Dorel, É., Melquiond, G.: Proving tight bounds on univariate expressions with elementary functions in Coq. J. Autom. Reason. 57(3), 187–217 (2016). https://doi.org/10.1007/s10817-015-9350-4
Miner, P.: Defining the IEEE-854 floating-point standard in PVS. Technical Report 19950023402, NASA, Langley Research Center, Hampton, VA, USA (1995)
Monniaux, D.: The pitfalls of verifying floating-point computations. ACM Trans. Program. Lang. Syst. 30(3), 12–11241 (2008). https://doi.org/10.1145/1353445.1353446
Moore, R.E.: Interval Analysis. Prentice-Hall, Englewood Cliffs, NJ (1963)
Muller, J.-M., Brunie, N., Dinechin, F., Jeannerod, C.-P., Joldes, M., Lefèvre, V., Melquiond, G., Revol, N., Torres, S.: Handbook of Floating-Point Arithmetic, 2nd edn. Birkhäuser, Basel (2018). https://doi.org/10.1007/978-3-319-76526-6
Roux, P.: Formal proofs of rounding error bounds—with application to an automatic positive definiteness check. J. Autom. Reason. 57(2), 135–156 (2016). https://doi.org/10.1007/s10817-015-9339-z
Rump, S.M.: Verification of positive definiteness. BIT Numer. Math. 46, 433–452 (2006)
Rump, S.M.: Verification methods: rigorous results using floating-point arithmetic. Acta Numer. 19, 287–449 (2010). https://doi.org/10.1017/S096249291000005X
Spiwack, A.: Verified computing in homological algebra. PhD thesis, École Polytechnique, Palaiseau, France (2011). https://tel.archives-ouvertes.fr/pastel-00605836
Tucker, W.: A rigorous ODE solver and Smale’s 14th problem. Found. Comput. Math. 2, 53–117 (2002). https://doi.org/10.1007/s002080010018
Acknowledgements
We are grateful to Guillaume Bertholon for his early work on extending the kernel of Coq with hardware floating-point numbers. This work was partly supported by the European Research Council (ERC) under the European Union’s Horizon 2020 Research and Innovation Programme - Grant Agreement n\(^\circ \)101001995. This work was partly supported by the NuSCAP project (ANR-20-CE48-0014) of the French national research agency (ANR).
Author information
Authors and Affiliations
Contributions
All the authors wrote the manuscript text, prepared the figures, and reviewed the manuscript.
Corresponding author
Ethics declarations
Competing interest
The authors declare no competing interests.
Additional information
Publisher's Note
Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.
Appendix A: Full Data for CoqInterval Benchmarks
Appendix A: Full Data for CoqInterval Benchmarks
In the table below, the string 452 stands for the CoqInterval version (i.e., 4.5.2). The source code for these benchmarks, along with guidelines to rerun them, can be found at the following URL: https://github.com/validsdp/benchs-primitive-floats.
Problems | 452-bigz-prec53 | 452-bigz-prec30 | 452-primfloat | 452-bigz-prec53-native | 452-bigz-prec30-native | 452-primfloat-native | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
Lemma | Time (s) | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup |
Chebyshev | 6.173 | N/A | 1.179 | 5.2x | 1.76 | 3.5x | N/A | 0.519 | 11.9x | ||
MT1 | 2.112 | 0.988 | 2.1x | 0.067 | 31.5x | 0.908 | 2.3x | 0.55 | 3.8x | 0.169 | 12.5x |
MT10 | 1.052 | 0.514 | 2.0x | 0.035 | 30.1x | 0.561 | 1.9x | 0.359 | 2.9x | 0.155 | 6.8x |
MT11 | 1.094 | 0.499 | 2.2x | 0.037 | 29.6x | 0.568 | 1.9x | 0.356 | 3.1x | 0.153 | 7.2x |
MT12 | 1.657 | 1.133 | 1.5x | 0.179 | 9.3x | 0.657 | 2.5x | 0.498 | 3.3x | 0.199 | 8.3x |
MT13 | 33.727 | 16.222 | 2.1x | 0.855 | 39.4x | 11.569 | 2.9x | 5.992 | 5.6x | 0.443 | 76.1x |
MT14 | 0.02 | 0.014 | 1.4x | 0.007 | 2.9x | 0.152 | 0.1x | 0.145 | 0.1x | 0.141 | 0.1x |
MT15 | 0.076 | 0.043 | 1.8x | 0.018 | 4.2x | 0.175 | 0.4x | 0.155 | 0.5x | 0.146 | 0.5x |
MT16 | 0.04 | 0.024 | 1.7x | 0.008 | 5.0x | 0.161 | 0.2x | 0.148 | 0.3x | 0.142 | 0.3x |
MT16__1 | 0.008 | 0.007 | 1.1x | 0.007 | 1.1x | 0.147 | 0.1x | 0.15 | 0.1x | 0.141 | 0.1x |
MT16__2 | 0.006 | 0.006 | 1.0x | 0.005 | 1.2x | 0.15 | 0.0x | 0.142 | 0.0x | 0.141 | 0.0x |
MT16__3 | 0.007 | 0.007 | 1.0x | 0.006 | 1.2x | 0.15 | 0.0x | 0.141 | 0.0x | 0.141 | 0.0x |
MT16__4 | 0.007 | 0.006 | 1.2x | 0.005 | 1.4x | 0.15 | 0.0x | 0.142 | 0.0x | 0.142 | 0.0x |
MT17 | 0.036 | 0.023 | 1.6x | 0.007 | 5.1x | 0.162 | 0.2x | 0.146 | 0.2x | 0.142 | 0.3x |
MT17’ | 0.036 | 0.023 | 1.6x | 0.007 | 5.1x | 0.162 | 0.2x | 0.146 | 0.2x | 0.141 | 0.3x |
MT18 | 0.413 | 0.225 | 1.8x | 0.027 | 15.3x | 0.287 | 1.4x | 0.214 | 1.9x | 0.147 | 2.8x |
MT18’ | 0.41 | 0.221 | 1.9x | 0.026 | 15.8x | 0.288 | 1.4x | 0.212 | 1.9x | 0.145 | 2.8x |
MT19 | 0.24 | 0.146 | 1.6x | 0.158 | 1.5x | 0.228 | 1.1x | 0.189 | 1.3x | 0.191 | 1.3x |
MT19’ | 0.24 | 0.147 | 1.6x | 0.022 | 10.9x | 0.23 | 1.0x | 0.194 | 1.2x | 0.154 | 1.6x |
MT2 | 1.33 | 0.786 | 1.7x | 0.119 | 11.2x | 0.598 | 2.2x | 0.425 | 3.1x | 0.184 | 7.2x |
MT20 | 2.881 | 1.529 | 1.9x | 0.112 | 25.7x | 1.001 | 2.9x | 0.622 | 4.6x | 0.168 | 17.1x |
MT20’ | 2.853 | 1.529 | 1.9x | 0.112 | 25.5x | 0.987 | 2.9x | 0.619 | 4.6x | 0.169 | 16.9x |
MT21 | 0.157 | 0.096 | 1.6x | 0.015 | 10.5x | 0.196 | 0.8x | 0.174 | 0.9x | 0.147 | 1.1x |
MT21’ | 0.156 | 0.097 | 1.6x | 0.09 | 1.7x | 0.197 | 0.8x | 0.174 | 0.9x | 0.17 | 0.9x |
Problems | 452-bigz-prec53 | 452-bigz-prec30 | 452-primfloat | 452-bigz-prec53-native | 452-bigz-prec30-native | 452-primfloat-native | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
Lemma | Time (s) | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup |
MT22 | 0.319 | 0.24 | 1.3x | 0.046 | 6.9x | 0.247 | 1.3x | 0.213 | 1.5x | 0.146 | 2.2x |
MT22’ | 0.32 | 0.241 | 1.3x | 0.035 | 9.1x | 0.251 | 1.3x | 0.212 | 1.5x | 0.147 | 2.2x |
MT23 | 0.513 | 0.429 | 1.2x | 0.083 | 6.2x | 0.303 | 1.7x | 0.269 | 1.9x | 0.163 | 3.1x |
MT23’ | 0.53 | 0.429 | 1.2x | 0.083 | 6.4x | 0.303 | 1.7x | 0.268 | 2.0x | 0.167 | 3.2x |
MT24 | 0.008 | 0.006 | 1.3x | 0.005 | 1.6x | 0.15 | 0.1x | 0.142 | 0.1x | 0.142 | 0.1x |
MT24’ | 0.007 | 0.006 | 1.2x | 0.005 | 1.4x | 0.149 | 0.0x | 0.141 | 0.0x | 0.141 | 0.0x |
MT25 | 0.031 | 0.024 | 1.3x | 0.015 | 2.1x | 0.172 | 0.2x | 0.161 | 0.2x | 0.157 | 0.2x |
MT3 | 0.335 | 0.16 | 2.1x | 0.017 | 19.7x | 0.273 | 1.2x | 0.206 | 1.6x | 0.148 | 2.3x |
MT4 | 0.345 | 0.168 | 2.1x | 0.018 | 19.2x | 0.285 | 1.2x | 0.21 | 1.6x | 0.148 | 2.3x |
MT5 | 0.03 | 0.021 | 1.4x | 0.012 | 2.5x | 0.308 | 0.1x | 0.295 | 0.1x | 0.286 | 0.1x |
MT6 | 0.064 | 0.04 | 1.6x | 0.016 | 4.0x | 0.323 | 0.2x | 0.3 | 0.2x | 0.291 | 0.2x |
MT7 | 0.01 | 0.008 | 1.2x | 0.006 | 1.7x | 0.152 | 0.1x | 0.142 | 0.1x | 0.141 | 0.1x |
MT8 | 0.34 | N/A | 0.034 | 10.0x | 0.261 | 1.3x | N/A | 0.155 | 2.2x | ||
MT9 | 0.47 | N/A | 0.076 | 6.2x | 0.299 | 1.6x | N/A | 0.169 | 2.8x | ||
RD | 0.014 | N/A | 0.011 | 1.3x | 0.527 | 0.0x | N/A | 0.492 | 0.0x | ||
Rump_Tucker | 117.45 | N/A | 6.012 | 19.5x | 29.703 | 4.0x | N/A | 1.593 | 73.7x | ||
abs_err_atan | 0.213 | 0.121 | 1.8x | 0.019 | 11.2x | 0.224 | 1.0x | 0.187 | 1.1x | 0.155 | 1.4x |
adaptiveLV | 0.011 | 0.014 | 0.8x | 0.011 | 1.0x | 0.155 | 0.1x | 0.524 | 0.0x | 0.148 | 0.1x |
arctan_0_1 | 0.039 | 0.033 | 1.2x | 0.016 | 2.4x | 0.168 | 0.2x | 0.154 | 0.3x | 0.151 | 0.3x |
bissect | 2.054 | N/A | 0.274 | 7.5x | 0.717 | 2.9x | N/A | 0.223 | 9.2x | ||
bug20120927 | 0.01 | N/A | 0.005 | 2.0x | 0.288 | 0.0x | N/A | 0.274 | 0.0x | ||
bug20140723_1 | 0.008 | N/A | 0.004 | 2.0x | 0.288 | 0.0x | N/A | 0.269 | 0.0x | ||
bug20140723_2 | 0.008 | N/A | 0.004 | 2.0x | 0.292 | 0.0x | N/A | 0.27 | 0.0x | ||
bug20140728 | 0.002 | 0.002 | 1.0x | 0.002 | 1.0x | 0.142 | 0.0x | 0.139 | 0.0x | 0.137 | 0.0x |
Problems | 452-bigz-prec53 | 452-bigz-prec30 | 452-primfloat | 452-bigz-prec53-native | 452-bigz-prec30-native | 452-primfloat-native | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
Lemma | Time (s) | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup |
bug20150924 | 0.002 | 0.002 | 1.0x | N/A | 0.144 | 0.0x | 0.139 | 0.0x | N/A | ||
bug20150925 | 0.003 | 0.003 | 1.0x | N/A | 0.144 | 0.0x | 0.138 | 0.0x | N/A | ||
butcher | 0.02 | 0.02 | 1.0x | 0.018 | 1.1x | 0.171 | 0.1x | 0.162 | 0.1x | 0.162 | 0.1x |
circle | 0.018 | 0.017 | 1.1x | 0.01 | 1.8x | 0.159 | 0.1x | 0.149 | 0.1x | 0.148 | 0.1x |
cos_cos_d2 | 0.97 | 0.644 | 1.5x | 0.087 | 11.1x | 0.458 | 2.1x | 0.362 | 2.7x | 0.178 | 5.4x |
cos_cos_d2__1 | 0.744 | 0.495 | 1.5x | 0.071 | 10.5x | 0.376 | 2.0x | 0.306 | 2.4x | 0.168 | 4.4x |
cos_cos_d2__2 | 0.756 | 0.499 | 1.5x | 0.075 | 10.1x | 0.414 | 1.8x | 0.318 | 2.4x | 0.176 | 4.3x |
cos_cos_d3 | 1.319 | 0.876 | 1.5x | 0.119 | 11.1x | 0.545 | 2.4x | 0.449 | 2.9x | 0.192 | 6.9x |
cos_cos_d3__1 | 0.981 | 0.652 | 1.5x | 0.093 | 10.5x | 0.465 | 2.1x | 0.373 | 2.6x | 0.19 | 5.2x |
cos_cos_d3__2 | 0.985 | 0.655 | 1.5x | 0.096 | 10.3x | 0.458 | 2.2x | 0.373 | 2.6x | 0.189 | 5.2x |
cos_cos_d4 | 1.562 | 1.036 | 1.5x | 0.141 | 11.1x | 0.607 | 2.6x | 0.478 | 3.3x | 0.201 | 7.8x |
cos_cos_d4__1 | 1.337 | 0.884 | 1.5x | 0.123 | 10.9x | 0.541 | 2.5x | 0.445 | 3.0x | 0.199 | 6.7x |
cos_cos_d4__2 | 1.222 | 0.814 | 1.5x | 0.118 | 10.4x | 0.522 | 2.3x | 0.412 | 3.0x | 0.203 | 6.0x |
cos_cos_d5 | 2.383 | 1.578 | 1.5x | 0.21 | 11.3x | 0.806 | 3.0x | 0.623 | 3.8x | 0.227 | 10.5x |
cos_cos_d5__1 | 1.823 | 1.197 | 1.5x | 0.164 | 11.1x | 0.666 | 2.7x | 0.53 | 3.4x | 0.221 | 8.2x |
cos_cos_d5__2 | 1.811 | 1.208 | 1.5x | 0.169 | 10.7x | 0.674 | 2.7x | 0.531 | 3.4x | 0.225 | 8.0x |
cos_cos_d6 | 2.322 | 1.52 | 1.5x | 0.207 | 11.2x | 0.792 | 2.9x | 0.611 | 3.8x | 0.233 | 10.0x |
cos_cos_d6__1 | 1.826 | 1.21 | 1.5x | 0.17 | 10.7x | 0.674 | 2.7x | 0.53 | 3.4x | 0.227 | 8.0x |
cos_cos_d6__2 | 1.597 | 1.068 | 1.5x | 0.157 | 10.2x | 0.62 | 2.6x | 0.497 | 3.2x | 0.23 | 6.9x |
cos_cos_d7 | 3.252 | 2.237 | 1.5x | 0.287 | 11.3x | 1.024 | 3.2x | 0.8 | 4.1x | 0.264 | 12.3x |
cos_cos_d7__1 | 2.211 | 1.458 | 1.5x | 0.204 | 10.8x | 0.766 | 2.9x | 0.597 | 3.7x | 0.245 | 9.0x |
cos_cos_d7__2 | 2.56 | 1.776 | 1.4x | 0.236 | 10.8x | 0.855 | 3.0x | 0.685 | 3.7x | 0.257 | 10.0x |
cos_cos_d8 | 3.274 | 2.26 | 1.4x | 0.293 | 11.2x | 1.037 | 3.2x | 0.809 | 4.0x | 0.288 | 11.4x |
cos_cos_d8__1 | 2.45 | 1.708 | 1.4x | 0.23 | 10.7x | 0.833 | 2.9x | 0.669 | 3.7x | 0.259 | 9.5x |
cos_cos_d8__2 | 2.462 | 1.632 | 1.5x | 0.233 | 10.6x | 0.836 | 2.9x | 0.649 | 3.8x | 0.265 | 9.3x |
example20071016_1 | 0.004 | 0.003 | 1.3x | 0.003 | 1.3x | 0.145 | 0.0x | 0.141 | 0.0x | 0.14 | 0.0x |
Problems | 452-bigz-prec53 | 452-bigz-prec30 | 452-primfloat | 452-bigz-prec53-native | 452-bigz-prec30-native | 452-primfloat-native | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
Lemma | Time (s) | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup | Time (s) | Speedup |
example20071016_2 | 0.004 | 0.004 | 1.0x | 0.004 | 1.0x | 0.149 | 0.0x | 0.14 | 0.0x | 0.14 | 0.0x |
example20071016_3 | 0.009 | N/A | 0.005 | 1.8x | 0.293 | 0.0x | N/A | 0.7 | 0.0x | ||
example20071016_3’ | 0.005 | N/A | 0.009 | 0.6x | 0.148 | 0.0x | N/A | 0.144 | 0.0x | ||
example20071016_4 | 0.066 | 0.048 | 1.4x | 0.012 | 5.5x | 0.179 | 0.4x | 0.16 | 0.4x | 0.147 | 0.4x |
example20071016_5 | 0.07 | 0.056 | 1.2x | 0.022 | 3.2x | 0.181 | 0.4x | 0.17 | 0.4x | 0.158 | 0.4x |
example20071016_6 | 0.004 | 0.004 | 1.0x | 0.003 | 1.3x | 0.144 | 0.0x | 0.139 | 0.0x | 0.139 | 0.0x |
example20071016_7 | 0.067 | 0.05 | 1.3x | 0.018 | 3.7x | 0.179 | 0.4x | 0.167 | 0.4x | 0.157 | 0.4x |
example20071016_8 | 0.009 | 0.008 | 1.1x | N/A | 0.153 | 0.1x | 0.144 | 0.1x | N/A | ||
example20120205_1 | 0.002 | 0.002 | 1.0x | 0.002 | 1.0x | 0.141 | 0.0x | 0.14 | 0.0x | 0.137 | 0.0x |
example20120205_2 | 0.003 | 0.003 | 1.0x | N/A | 0.144 | 0.0x | 0.139 | 0.0x | N/A | ||
example20120205_3 | 0.003 | 0.003 | 1.0x | 0.003 | 1.0x | 0.144 | 0.0x | 0.141 | 0.0x | 0.138 | 0.0x |
example20120205_4 | 0.004 | 0.004 | 1.0x | 0.003 | 1.3x | 0.145 | 0.0x | 0.139 | 0.0x | 0.142 | 0.0x |
example20140221_1 | 13.612 | N/A | 0.759 | 17.9x | 3.752 | 3.6x | N/A | 0.386 | 35.3x | ||
example20140221_2 | 0.087 | N/A | 0.018 | 4.8x | 0.177 | 0.5x | N/A | 0.15 | 0.6x | ||
example20140610_1 | 13.331 | 8.219 | 1.6x | 0.658 | 20.3x | 4.138 | 3.2x | 2.674 | 5.0x | 0.413 | 32.3x |
example20140610_2 | 1.631 | 1.142 | 1.4x | 0.196 | 8.3x | 0.629 | 2.6x | 0.514 | 3.2x | 0.222 | 7.3x |
example20150105 | 0.516 | N/A | 0.068 | 7.6x | 0.305 | 1.7x | N/A | 0.177 | 2.9x | ||
example_ln_1 | 0.004 | 0.004 | 1.0x | 0.003 | 1.3x | 0.149 | 0.0x | 0.14 | 0.0x | 0.14 | 0.0x |
example_ln_2 | 0.008 | 0.006 | 1.3x | 0.005 | 1.6x | 0.295 | 0.0x | 0.281 | 0.0x | 0.278 | 0.0x |
exp_0_3 | 0.024 | 0.017 | 1.4x | 0.009 | 2.7x | 0.16 | 0.1x | 0.161 | 0.1x | 0.144 | 0.2x |
exp_cos_0_1 | 0.045 | 0.033 | 1.4x | 0.012 | 3.8x | 0.165 | 0.3x | 0.155 | 0.3x | 0.148 | 0.3x |
h_54_ln_2 | 0.01 | 0.008 | 1.2x | 0.006 | 1.7x | 0.155 | 0.1x | 0.143 | 0.1x | 0.143 | 0.1x |
Magnetism | 0.021 | 0.02 | 1.1x | 0.021 | 1.0x | 0.173 | 0.1x | 0.166 | 0.1x | 0.164 | 0.1x |
rel_err_geodesic | 13.374 | 8.293 | 1.6x | 0.687 | 19.5x | 4.395 | 3.0x | 2.691 | 5.0x | 0.424 | 31.5x |
rel_err_geodesic’ | 1.63 | 1.141 | 1.4x | 0.198 | 8.2x | 0.634 | 2.6x | 0.519 | 3.1x | 0.224 | 7.3x |
remez_sqrt | 0.07 | 0.057 | 1.2x | 0.02 | 3.5x | 0.184 | 0.4x | 0.171 | 0.4x | 0.159 | 0.4x |
x_ln1p_0_1 | 0.02 | 0.016 | 1.2x | 0.01 | 2.0x | 0.159 | 0.1x | 0.148 | 0.1x | 0.146 | 0.1x |
Rights and permissions
Springer Nature or its licensor (e.g. a society or other partner) holds exclusive rights to this article under a publishing agreement with the author(s) or other rightsholder(s); author self-archiving of the accepted manuscript version of this article is solely governed by the terms of such publishing agreement and applicable law.
About this article
Cite this article
Martin-Dorel, É., Melquiond, G. & Roux, P. Enabling Floating-Point Arithmetic in the Coq Proof Assistant. J Autom Reasoning 67, 33 (2023). https://doi.org/10.1007/s10817-023-09679-x
Received:
Accepted:
Published:
DOI: https://doi.org/10.1007/s10817-023-09679-x