Name:

implementpoly implements a polynomial using double, double-double and triple-double arithmetic and generates a Gappa proof

Library names:

sollya_obj_t sollya_lib_implementpoly(sollya_obj_t, sollya_obj_t,                                       sollya_obj_t, sollya_obj_t,                                       sollya_obj_t, sollya_obj_t, ...) sollya_obj_t sollya_lib_v_implementpoly(sollya_obj_t, sollya_obj_t,                                         sollya_obj_t, sollya_obj_t,                                         sollya_obj_t, sollya_obj_t, va_list)

Usage:

implementpoly(polynomial, range, error bound, format, functionname, filename) : (function, range, constant, D|double|DD|doubledouble|TD|tripledouble, string, string) -> function implementpoly(polynomial, range, error bound, format, functionname, filename, honor coefficient precisions) : (function, range, constant, D|double|DD|doubledouble|TD|tripledouble, string, string, honorcoeffprec) -> function implementpoly(polynomial, range, error bound, format, functionname, filename, proof filename) : (function, range, constant, D|double|DD|doubledouble|TD|tripledouble, string, string, string) -> function implementpoly(polynomial, range, error bound, format, functionname, filename, honor coefficient precisions, proof filename) : (function, range, constant, D|double|DD|doubledouble|TD|tripledouble, string, string, honorcoeffprec, string) -> function

Description:

Example 1:

   > implementpoly(1 - 1/6 * x^2 + 1/120 * x^4, [-1b-10;1b-10], 1b-30, D, "p","implementation.c");
   1 + x^2 * (-0.166666666666666657414808128123695496469736099243164 + x^2 * 8.3333333333333332176851016015461937058717012405395e-3)
   > readfile("implementation.c");
   /*
       This code was generated using non-trivial code generation commands of
       the Sollya software program.
       
       Before using, modifying and/or integrating this code into other
       software, review the copyright and license status of this generated
       code. In particular, see the exception below.
       
       Sollya is
       
       Copyright 2006-2013 by
       
       Laboratoire de l'Informatique du Parallelisme, UMR CNRS - ENS Lyon -
       UCB Lyon 1 - INRIA 5668,
       
       Laboratoire d'Informatique de Paris 6, equipe PEQUAN, UPMC Universite
       Paris 06 - CNRS - UMR 7606 - LIP6, Paris, France
       
       and by
       
       Centre de recherche INRIA Sophia-Antipolis Mediterranee, equipe APICS,
       Sophia Antipolis, France.
       
       Contributors Ch. Lauter, S. Chevillard, M. Joldes
       
       christoph.lauter@ens-lyon.org
       sylvain.chevillard@ens-lyon.org
       joldes@lass.fr
       
       The Sollya software is a computer program whose purpose is to provide
       an environment for safe floating-point code development. It is
       particularily targeted to the automatized implementation of
       mathematical floating-point libraries (libm). Amongst other features,
       it offers a certified infinity norm, an automatic polynomial
       implementer and a fast Remez algorithm.
       
       The Sollya software is governed by the CeCILL-C license under French
       law and abiding by the rules of distribution of free software.  You
       can use, modify and/ or redistribute the software under the terms of
       the CeCILL-C license as circulated by CEA, CNRS and INRIA at the
       following URL "http://www.cecill.info".
       
       As a counterpart to the access to the source code and rights to copy,
       modify and redistribute granted by the license, users are provided
       only with a limited warranty and the software's author, the holder of
       the economic rights, and the successive licensors have only limited
       liability.
       
       In this respect, the user's attention is drawn to the risks associated
       with loading, using, modifying and/or developing or reproducing the
       software by the user in light of its specific status of free software,
       that may mean that it is complicated to manipulate, and that also
       therefore means that it is reserved for developers and experienced
       professionals having in-depth computer knowledge. Users are therefore
       encouraged to load and test the software's suitability as regards
       their requirements in conditions enabling the security of their
       systems and/or data to be ensured and, more generally, to use and
       operate it in the same conditions as regards security.
       
       The fact that you are presently reading this means that you have had
       knowledge of the CeCILL-C license and that you accept its terms.
       
       The Sollya program is distributed WITHOUT ANY WARRANTY; without even
       the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
       PURPOSE.
       
       This generated program is distributed WITHOUT ANY WARRANTY; without
       even the implied warranty of MERCHANTABILITY or FITNESS FOR A
       PARTICULAR PURPOSE.
       
       As a special exception, you may create a larger work that contains
       part or all of this software generated using Sollya and distribute
       that work under terms of your choice, so long as that work isn't
       itself a numerical code generator using the skeleton of this code or a
       modified version thereof as a code skeleton.  Alternatively, if you
       modify or redistribute this generated code itself, or its skeleton,
       you may (at your option) remove this special exception, which will
       cause this generated code and its skeleton and the resulting Sollya
       output files to be licensed under the CeCILL-C licence without this
       special exception.
       
       This special exception was added by the Sollya copyright holders in
       version 4.1 of Sollya.
       
   */
   
   
   #define p_coeff_0h 1.00000000000000000000000000000000000000000000000000000000000000000000000000000000e+00
   #define p_coeff_2h -1.66666666666666657414808128123695496469736099243164062500000000000000000000000000e-01
   #define p_coeff_4h 8.33333333333333321768510160154619370587170124053955078125000000000000000000000000e-03
   
   
   void p(double *p_resh, double x) {
   double p_x_0_pow2h;
   
   
   p_x_0_pow2h = x * x;
   
   
   double p_t_1_0h;
   double p_t_2_0h;
   double p_t_3_0h;
   double p_t_4_0h;
   double p_t_5_0h;
    
   
   
   p_t_1_0h = p_coeff_4h;
   p_t_2_0h = p_t_1_0h * p_x_0_pow2h;
   p_t_3_0h = p_coeff_2h + p_t_2_0h;
   p_t_4_0h = p_t_3_0h * p_x_0_pow2h;
   p_t_5_0h = p_coeff_0h + p_t_4_0h;
   *p_resh = p_t_5_0h;
   
   
   }
   

Example 2:

   > implementpoly(1 - 1/6 * x^2 + 1/120 * x^4, [-1b-10;1b-10], 1b-30, D, "p","implementation.c","implementation.gappa");
   1 + x^2 * (-0.166666666666666657414808128123695496469736099243164 + x^2 * 8.3333333333333332176851016015461937058717012405395e-3)

Example 3:

   > verbosity = 1!;
   > q = implementpoly(1 - dirtysimplify(TD(1/6)) * x^2,[-1b-10;1b-10],1b-60,DD,"p","implementation.c");
   Warning: at least one of the coefficients of the given polynomial has been rounded in a way
   that the target precision can be achieved at lower cost. Nevertheless, the implemented polynomial
   is different from the given one.
   > printexpansion(q);
   0x3ff0000000000000 + x^2 * 0xbfc5555555555555
   > r = implementpoly(1 - dirtysimplify(TD(1/6)) * x^2,[-1b-10;1b-10],1b-60,DD,"p","implementation.c",honorcoeffprec);
   Warning: the infered precision of the 2th coefficient of the polynomial is greater than
   the necessary precision computed for this step. This may make the automatic determination
   of precisions useless.
   > printexpansion(r);
   0x3ff0000000000000 + x^2 * (0xbfc5555555555555 + 0xbc65555555555555 + 0xb905555555555555)

Example 4:

   > p = 0x3ff0000000000000 + x * (0x3ff0000000000000 + x * (0x3fe0000000000000 + x * (0x3fc5555555555559 + x * (0x3fa55555555555bd + x * (0x3f811111111106e2 + x * (0x3f56c16c16bf5eb7 + x * (0x3f2a01a01a292dcd + x * (0x3efa01a0218a016a + x * (0x3ec71de360331aad + x * (0x3e927e42e3823bf3 + x * (0x3e5ae6b2710c2c9a + x * (0x3e2203730c0a7c1d + x * 0x3de5da557e0781df))))))))))));
   > q = implementpoly(p,[-1/2;1/2],1b-60,D,"p","implementation.c",honorcoeffprec,"implementation.gappa");
   > if (q != p) then print("During implementation, rounding has happened.") else print("Polynomial implemented as given.");
   Polynomial implemented as given.
See also: honorcoeffprec, roundcoefficients, double, doubledouble, tripledouble, readfile, printexpansion, error, remez, fpminimax, taylor, implementconstant
Go back to the list of commands