English | 日本語
Last Update: Feb. 7, 2024

kv - a C++ Library for Verified Numerical Computation

Masahide Kashiwagi

1. Introduction

A set of libraries for verified numerical computations (kv library), which is written in the C++ language, is available to download in this page.

For overview of verified numerical computation and kv library, please see the slide: kv-intro-e.pdf (84 pages)

In old versions of kv library (which had been developed from the autumn, 2007 to the spring, 2013), the interval library in Boost (boost.interval) was used. In the present version of kv library (see, 3. Download and Install), all programs with respect to interval arithmetics are originally produced, whereas some functions in Boost still partially used in kv library, e.g., boost.ublas for linear algebras.

2. Requirement

A computational environment where C++ program and Boost can work, is required to use kv library.

We need to change rounding mode to realize interval arithmeric. See 5. Interval Arithmetic and 20. Changing Rounding Mode and Compiler Options for details of the requirements on CPU and compiler.

Basically, the present kv library is developed on Ubuntu 22.04 (64bit) + gcc. Unix operating systems (64bit) are recommended, while it was confirmed that kv library works on the following computational environments:

3. Download and Install

Download: kv-0.4.56.tar.gz (updated on Feb. 7, 2024)
(Old versions are available to download here.)

You can also access to the source code of kv on https://github.com/mskashi/kv .

The kv library is designed to work without "install" (and therefore "make") but only with the header files in itself. After expanding the archive file of the kv library, the three directory of "kv", "test" and "example" will be constructed. The main components of the kv library are in "kv" directory. Therefore, the kv library is available after setting the directory "kv" along with all the files in it into an appropriate directory (e.g., the current directory or /usr/local/include).

The all functions provided by kv library are confined in the namespace of "kv" so that these functions does not compete with other libraries.

The operation confirmation of kv library can be done by compiling some .cc file in "test" or "example". For example, after

you can verify the operation of kv library by entering the following command (on "test" directory).
c++ -I.. -I/usr/local/include test-interval.cc
Note that the directories in which the files of kv library and Boost exist, should be specified in the above command.

It is recommended to specify the options -O3 (or other possible optimization options) and -DNDEBUG, both of which strongly affect the execution speed (the details of the NDEBUG macro can be found in boost.ublas). Additionally remark that the option of -DKV_FASTROUND is available to perform faster interval arithmetics when using an Intel's CPU and a 64bit operating system.

When you change your computational environment or compile options, it is recommended to re-check whether the rounding mode is correctly changed for the four arithmetic and square-root operations, by compiling and performing test/test-rounding.cc.

4. List of components

5. Interval arithmetic (interval)

6. Double-double precision arithmetics (dd)

7. Intel 80bit floating point numbers (_Float64x, ddx) (in Japanese)

8. Wrapper for MPFR (mpfr) (in Japanese)

9. Complex number Arithmetic (complex) (in Japanese)

10. Automatic differentiation (autodif) (in Japanese)

11. Affine Arithmetic (affine) (in Japanese)

12. Power series arithmetic (psa) (in Japanese)

13. Verification by the Krawczyk method for nonlinear equations (in Japanese)

14. Finding all solutions to nonlinear equations (in Japanese)

15. Verification for initial value problem for ODEs (in Japanese)

16. Solver for initial value problems and verification for boundary value problem by shooting method (in Japanese)

17. Numerical integration (in Japanese)

18. Verification for special functions (in Japanese)

19. Other functions (in Japanese)

20. Function objects and problem description (in Japanese)

21. Changing Rounding Mode and Compiler Options

22. Appendix

22.1 What is Boost? (in Japanese)

22.2 Matrix computation with boost.ublas (in Japanese)

22.3 Numeric types (in Japanese)

22.4 Bonus: a simple interval arithmetic library

23. Web Demonstration of kv Library

24. Application Examples of kv Library (in Japanese)

25. Papers or Articles related to kv Library (in Japanese)

26. Concluding remarks

This library is used in the C++ part of HIKMOT and contributes greatly to its high speed. It is also used for research by students in my laboratory and development is carried out refrecting their oppinions.

Since the library will not be improved unless it is used by a lot of people, I hope many people will use this library.

For the development of this library, Mr. Keiichiro Kashiwagi of NTT Network Innovation Laboratories got a great deal of cooperation. I express my gratitude here.

Copyright (c) 2013-2022 Masahide Kashiwagi. This software is released under the MIT license.

Update history (in Japanese)

Acknowledgment (in Japanese)

kv - a C++ Library for Verified Numerical Computation /