Overview
 Salsa aims at improving the numerical accuracy of programs based on floatingpoint arithmetic.
 Salsa relies on static analysis by abstract interpretation to compute variable ranges and roundoff error bounds.
 Salsa improves the numerical accuracy of the value returned by the function.
 Salsa takes as input ranges for the input variables of programs id ∈ [a,b]. These ranges are given by the user.
 Salsa reduces partly the roundoff errors by automatically transforming Clike programs in a source to source manner.
 Salsa accepts programs made of assignments, conditionals, while loop, functions and arrays.
 Salsa has been experimented on various examples coming from embedded systems, iterative methods, numerical algorithms, ...
Example
Salsa has been evaluated on a suite of control algorithms and numerical methods to improve their numerical accuracy of computations. The experiment results shown that our tool improves significantly their accuracy.
Computing the position (x, y) of a two wheeled robot by odometry in a Cartesian space. The instantaneous rotation speeds sl and sr of the left and right wheels are given.
Before Transformation

After Transformation

The accuracy of the transformed Odometry program is improved by 21%
Software Architecture
Documentation
How does Salsa work?
 Salsa receives as input a file corresponding to the program that we aim at improving.
 The program must follows the syntax accepted by Salsa .
 Salsa optimized the value returned by the main function.
 Salsa analyses the input program.
 Salsa transforms this program by applying the intraprocedural and/or interprocedural transformation rules.
 Salsa builds large expressions.
 Salsa calls Sardana to rewrite the arithmetic expressions.
 Sardana reparses the given arithmetic expression in different ways in order to return a more accurate expression.
 Salsa slices the larger expressions at a defined level of the syntactic tree and assigns them to intermediary variables (TMP).
 Salsa reanalyses the transformed programs recursively until the accuracy is no longer improved.
 Salsa returns as output a file containing the transformed program with best accuracy.
Parameters
 sliceSize : number corresponds to the height of the syntactic tree where we slice the arithmetic expression.
 ω : width of the intervals corresponding to the values of the arguments of a function.
 ruleSelector : selects which transformation rule to apply.
 widen : number of iterations allowed before applying a widening in static analysis.
Bibliographie
click here to find more details on our Salsa tool and its different applications.
News
 Integrating the affine arithmetic to compute a more safe error bounds
Contacts
For any question, please feel free to send us a mail!