Most numerical simulations are performed in double precision (IEEE754 binary64). Unfortunately this can be costly in terms of computing time, memory transfer and energy consumption.

PROMISE is a tool to auto-tune the precision of floating-point variables in numerical codes [GJPF2019]. From an initial C or C++ program and a required accuracy on the computed results, PROMISE automatically modifies the floating-point types in favor of low precision variables. To estimate the numerical quality of results, PROMISE uses CADNA which controls round-off errors in simulation programs [JC2008] [EBFJ2015]. The search for a valid type configuration is based on the Delta Debug algorithm [Z2009].

PROMISE has been successfully tested on programs implementing several numerical algorithms including linear system solving and also on an industrial code that solves the neutron transport equations.


With a few manipulations, you can transform your C/C++ code into a code that PROMISE can handle (you just need to tell PROMISE which variables it can change). Then PROMISE uses CADNA to evaluate the numerical quality of the results, and find (if it exists) a set of datatypes that satisfies your numerical expectactions.

  1. first install PROMISE ;

  2. Read the details of the options ;

  3. And check the example.


If you have any feedback, bug reports or comments, please report it in our gitlab or send an email to the CADNA team.


Baptiste Mary has done the PROMISE logo (and also the CADNA logo).

This PROMISE version has been developed with the financial support of the COMET project Model-Based Condition Monitoring and Process Control Systems, hosted by the Materials Center Leoben Forschung GmbH.

This PROMISE version is a full rewriting of the first PROMISE version, written by Romain Picot et al.

  1. Graillat, F. Jézéquel, R. Picot, F. Févotte, B. Lathuilière. Auto-tuning for floating-point precision with Discrete Stochastic Arithmetic, Journal of Computational Science, 36, pages 101017, 2019. HAL ID:hal-01331917 (pdf)

  1. Jézéquel and J.-M. Chesneaux. CADNA: a library for estimating round-off error propagation. Computer Physics Communications, 178(12):933-955, 2008.

  1. Eberhart, J. Brajard, P. Fortin, and F. Jézéquel, High Performance Numerical Validation using Stochastic Arithmetic, Reliable Computing, 21, pages 35-52, 2015 (pdf)

  1. Zeller, Why Programs Fail, 2nd ed., Morgan Kaufmann, Boston, 2009.