Skip to main content
Log in

Enabling Floating-Point Arithmetic in the Coq Proof Assistant

  • Published:
Journal of Automated Reasoning Aims and scope Submit manuscript

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.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5

Similar content being viewed by others

Notes

  1. http://www.jhauser.us/arithmetic/SoftFloat.html.

  2. https://gitlab.inria.fr/flocq/flocq/-/blob/flocq-3.2.1/src/IEEE754/Binary.v.

  3. https://coq.github.io/doc/V8.17.0/stdlib/Coq.Numbers.Cyclic.Int63.Uint63.html.

  4. For instance, the binary64 format makes room for \(2^{53}-2\) different NaN values.

  5. 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.

  6. https://gitlab.inria.fr/flocq/flocq/-/blob/flocq-4.1.1/src/IEEE754/PrimFloat.v.

  7. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34678.

  8. https://github.com/coq/coq/pull/12959/commits/ef3ec53e4f74f32a705489b332b037569680d28e.

  9. https://github.com/coq/coq/pull/12959/commits/5c7f63fa7a88cf2cb9b6837eb2797268c5843030.

  10. https://gitlab.inria.fr/flocq/flocq/-/blob/flocq-4.1.1/examples/Print17.v.

  11. https://github.com/coq/coq/issues/14782#issuecomment-906480643.

  12. https://github.com/coq/coq/issues/12483.

  13. https://github.com/coq/coq/issues/16096.

  14. https://github.com/coq/coq/blob/V8.17.0/kernel/float64_63.ml#L28-L35.

  15. https://github.com/coq/coq/issues/15070.

  16. https://github.com/coq/coq/issues/17871.

  17. The authors would like to thank Guillaume Bertholon who implemented the original version of primitive_float_infnan.

References

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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)

  7. 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

    Article  MathSciNet  MATH  Google Scholar 

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. Higham, N.: Accuracy and Stability of Numerical Algorithms. Society for Industrial and Applied Mathematics, Philadelphia, PA (1996)

    MATH  Google Scholar 

  14. IEEE Computer Society: IEEE standard for floating-point arithmetic. Technical Report 754-2008, IEEE (August 2008). https://doi.org/10.1109/IEEESTD.2008.4610935

  15. 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

    Article  MathSciNet  MATH  Google Scholar 

  16. 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

  17. 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

    Article  MathSciNet  MATH  Google Scholar 

  18. Miner, P.: Defining the IEEE-854 floating-point standard in PVS. Technical Report 19950023402, NASA, Langley Research Center, Hampton, VA, USA (1995)

  19. 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

    Article  Google Scholar 

  20. Moore, R.E.: Interval Analysis. Prentice-Hall, Englewood Cliffs, NJ (1963)

    Google Scholar 

  21. 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

  22. 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

    Article  MATH  Google Scholar 

  23. Rump, S.M.: Verification of positive definiteness. BIT Numer. Math. 46, 433–452 (2006)

    Article  MathSciNet  MATH  Google Scholar 

  24. Rump, S.M.: Verification methods: rigorous results using floating-point arithmetic. Acta Numer. 19, 287–449 (2010). https://doi.org/10.1017/S096249291000005X

    Article  MathSciNet  MATH  Google Scholar 

  25. Spiwack, A.: Verified computing in homological algebra. PhD thesis, École Polytechnique, Palaiseau, France (2011). https://tel.archives-ouvertes.fr/pastel-00605836

  26. Tucker, W.: A rigorous ODE solver and Smale’s 14th problem. Found. Comput. Math. 2, 53–117 (2002). https://doi.org/10.1007/s002080010018

    Article  MathSciNet  MATH  Google Scholar 

Download references

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

Authors

Contributions

All the authors wrote the manuscript text, prepared the figures, and reviewed the manuscript.

Corresponding author

Correspondence to Guillaume Melquiond.

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.

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

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

Download citation

  • Received:

  • Accepted:

  • Published:

  • DOI: https://doi.org/10.1007/s10817-023-09679-x

Keywords

Navigation