Go back to the main page of Sollya

Commands available within Sollya

Help pages

Go back to the list of commands

Name:

abs the absolute value.

Library names:

sollya_obj_t sollya_lib_abs(sollya_obj_t) sollya_obj_t sollya_lib_build_function_abs(sollya_obj_t) #define SOLLYA_ABS(x) sollya_lib_build_function_abs(x)

Description:

Go back to the list of commands

Name:

absolute indicates an absolute error for externalplot, fpminimax or supnorm

Library names:

sollya_obj_t sollya_lib_absolute() int sollya_lib_is_absolute(sollya_obj_t)

Usage:

absolute : absolute|relative

Description:

Example 1:

   > bashexecute("gcc -fPIC -c externalplotexample.c");
   > bashexecute("gcc -shared -o externalplotexample externalplotexample.o -lgmp -lmpfr");
   > externalplot("./externalplotexample",absolute,exp(x),[-1/2;1/2],12,perturb);
See also: externalplot, fpminimax, relative, bashexecute, supnorm
Go back to the list of commands

Name:

accurateinfnorm computes a faithful rounding of the infinity norm of a function

Usage:

accurateinfnorm(function,range,constant) : (function, range, constant) -> constant accurateinfnorm(function,range,constant,exclusion range 1,...,exclusion range n) : (function, range, constant, range, ..., range) -> constant

Parameters:

Description:

Example 1:

   > p = remez(exp(x), 5, [-1;1]);
   > accurateinfnorm(p - exp(x), [-1;1], 20);
   4.52055246569216251373291015625e-5
   > accurateinfnorm(p - exp(x), [-1;1], 30);
   4.5205513970358879305422306060791015625e-5
   > accurateinfnorm(p - exp(x), [-1;1], 40);
   4.520551396713923253400935209356248378753662109375e-5

Example 2:

   > p = remez(exp(x), 5, [-1;1]);
   > midpointmode = on!;
   > infnorm(p - exp(x), [-1;1]);
   0.45205~5/7~e-4
   > accurateinfnorm(p - exp(x), [-1;1], 40);
   4.520551396713923253400935209356248378753662109375e-5
See also: infnorm, dirtyinfnorm, supnorm, checkinfnorm, remez, diam
Go back to the list of commands

Name:

acos the arccosine function.

Library names:

sollya_obj_t sollya_lib_acos(sollya_obj_t) sollya_obj_t sollya_lib_build_function_acos(sollya_obj_t) #define SOLLYA_ACOS(x) sollya_lib_build_function_acos(x)

Description:

See also: cos
Go back to the list of commands

Name:

acosh the arg-hyperbolic cosine function.

Library names:

sollya_obj_t sollya_lib_acosh(sollya_obj_t) sollya_obj_t sollya_lib_build_function_acosh(sollya_obj_t) #define SOLLYA_ACOSH(x) sollya_lib_build_function_acosh(x)

Description:

See also: cosh
Go back to the list of commands

Name:

&& boolean AND operator

Library name:

sollya_obj_t sollya_lib_and(sollya_obj_t, sollya_obj_t)

Usage:

expr1 && expr2 : (boolean, boolean) -> boolean

Parameters:

Description:

Example 1:

   > true && false;
   false

Example 2:

   > (1 == exp(0)) && (0 == log(1));
   true
See also: ||, !
Go back to the list of commands

Name:

:. add an element at the end of a list.

Library name:

sollya_obj_t sollya_lib_append(sollya_obj_t, sollya_obj_t)

Usage:

L:.x : (list, any type) -> list

Parameters:

Description:

Example 1:

   > [|2,3,4|]:.5;
   [|2, 3, 4, 5|]

Example 2:

   > [|1,2,3|]:.[|4,5,6|];
   [|1, 2, 3, [|4, 5, 6|]|]

Example 3:

   > [||]:.1;
   [|1|]
See also: .:, @
Go back to the list of commands

Name:

~ floating-point evaluation of a constant expression

Library name:

sollya_obj_t sollya_lib_approx(sollya_obj_t)

Usage:

~ expression : function -> constant ~ something : any type -> any type

Parameters:

Description:

Example 1:

   > print(exp(5));
   exp(5)
   > print(~ exp(5));
   1.48413159102576603421115580040552279623487667593878e2

Example 2:

   > autosimplify = off!;

Example 3:

   > print(~sin(5 * pi));
   0

Example 4:

   > print(~exp(x));
   exp(x)
   > print(~ "Hello");
   Hello

Example 5:

   > print(~exp(x*5*Pi));
   exp((pi) * 5 * x)
   > print(exp(x* ~(5*Pi)));
   exp(x * 1.57079632679489661923132169163975144209858469968757e1)

Example 6:

   > print(~exp(5)*x);
   1.48413159102576603421115580040552279623487667593878e2 * x
   > print( (~exp(5))*x);
   1.48413159102576603421115580040552279623487667593878e2 * x
   > print(~(exp(5)*x));
   exp(5) * x
See also: evaluate, prec, error
Go back to the list of commands

Name:

asciiplot plots a function in a range using ASCII characters

Library name:

void sollya_lib_asciiplot(sollya_obj_t, sollya_obj_t)

Usage:

asciiplot(function, range) : (function, range) -> void

Parameters:

Description:

Example 1:

   > asciiplot(exp(x),[1;2]);
                                                                             xx
                                                                           xx  
                                                                         xx    
                                                                       xx      
                                                                     xx        
                                                                  xxx          
                                                                xx             
                                                             xxx               
                                                           xx                  
                                                        xxx                    
                                                     xxx                       
                                                  xxx                          
                                               xxx                             
                                            xxx                                
                                        xxxx                                   
                                     xxx                                       
                                 xxxx                                          
                             xxxx                                              
                         xxxx                                                  
                     xxxx                                                      
                xxxxx                                                          
           xxxxx                                                               
      xxxxx                                                                    
   xxx                                                                         

Example 2:

   > asciiplot(expm1(x),[-1;2]);
                            |                                                 x
                            |                                                x
                            |                                               x  
                            |                                              x   
                            |                                            xx    
                            |                                           x      
                            |                                          x       
                            |                                        xx        
                            |                                       x          
                            |                                     xx           
                            |                                   xx             
                            |                                 xx               
                            |                               xx                 
                            |                             xx                   
                            |                           xx                     
                            |                        xxx                       
                            |                     xxx                          
                            |                 xxxx                             
                            |             xxxx                                 
                            |         xxxx                                     
                            |   xxxxxx                                         
   ---------------------xxxxxxxx-----------------------------------------------
            xxxxxxxxxxxx    |                                                  
   xxxxxxxxx                |                                                  

Example 3:

   > asciiplot(5,[-1;1]);
   5

Example 4:

   > asciiplot(exp(x),[1;1]);
   2.71828182845904523536028747135266249775724709369998
See also: plot, externalplot
Go back to the list of commands

Name:

asin the arcsine function.

Library names:

sollya_obj_t sollya_lib_asin(sollya_obj_t) sollya_obj_t sollya_lib_build_function_asin(sollya_obj_t) #define SOLLYA_ASIN(x) sollya_lib_build_function_asin(x)

Description:

See also: sin
Go back to the list of commands

Name:

asinh the arg-hyperbolic sine function.

Library names:

sollya_obj_t sollya_lib_asinh(sollya_obj_t) sollya_obj_t sollya_lib_build_function_asinh(sollya_obj_t) #define SOLLYA_ASINH(x) sollya_lib_build_function_asinh(x)

Description:

See also: sinh
Go back to the list of commands

Name:

atan the arctangent function.

Library names:

sollya_obj_t sollya_lib_atan(sollya_obj_t) sollya_obj_t sollya_lib_build_function_atan(sollya_obj_t) #define SOLLYA_ATAN(x) sollya_lib_build_function_atan(x)

Description:

See also: tan
Go back to the list of commands

Name:

atanh the hyperbolic arctangent function.

Library names:

sollya_obj_t sollya_lib_atanh(sollya_obj_t) sollya_obj_t sollya_lib_build_function_atanh(sollya_obj_t) #define SOLLYA_ATANH(x) sollya_lib_build_function_atanh(x)

Description:

See also: tanh
Go back to the list of commands

Name:

autodiff Computes the first n derivatives of a function at a point or over an interval.

Library name:

sollya_obj_t sollya_lib_autodiff(sollya_obj_t, sollya_obj_t, sollya_obj_t)

Usage:

autodiff(f, n, x0) : (function, integer, constant) -> list autodiff(f, n, I) : (function, integer, range) -> list

Parameters:

Description:

Example 1:

   > L = autodiff(exp(cos(x))+sin(exp(x)), 5, 0);
   > midpointmode = on!;
   > for f_i in L do f_i;
   0.3559752813266941742012789792982961497379810154498~2/4~e1
   0.5403023058681397174009366074429766037323104206179~0/3~
   -0.3019450507398802024611853185539984893647499733880~6/2~e1
   -0.252441295442368951995750696489089699886768918239~6/4~e1
   0.31227898756481033145214529184139729746320579069~1/3~e1
   -0.16634307959006696033484053579339956883955954978~3/1~e2

Example 2:

   > f = log(cos(x)+x);
   > L = autodiff(log(cos(x)+x), 5, [2,4]);
   > L[0];
   [0;1.27643852425465597132446653114905059102580436018893]
   > evaluate(f, [2,4]);
   [0.45986058925497069206106494332976097408234056912429;1.20787210589964169595901037621103012113048821362855]
   > fprime = diff(f);
   > L[1];
   [2.53086745013099407167484456656211083053393118778677e-2;1.75680249530792825137263909451182909413591288733649]
   > evaluate(fprime,[2,4]);
   [2.71048755415961996452136364304380881763456815673085e-2;1.10919530663943290837397225788623531405558431279949]

Example 3:

   > L = autodiff(sin(x)/x, 0, [-1,1]);
   > L[0];
   [-@Inf@;@Inf@]
   > evaluate(sin(x)/x, [-1,1]);
   [0.5403023058681397174009366074429766037323104206179;1]
See also: diff, evaluate
Go back to the list of commands

Name:

autosimplify activates, deactivates or inspects the value of the automatic simplification state variable

Library names:

void sollya_lib_set_autosimplify_and_print(sollya_obj_t) void sollya_lib_set_autosimplify(sollya_obj_t) sollya_obj_t sollya_lib_get_autosimplify()

Usage:

autosimplify = activation value : on|off -> void autosimplify = activation value ! : on|off -> void autosimplify : on|off

Parameters:

Description:

Example 1:

   > autosimplify = on !;
   > print(x - x);
   0
   > autosimplify = off ;
   Automatic pure tree simplification has been deactivated.
   > print(x - x);
   x - x

Example 2:

   > autosimplify = on !;
   > print(rationalapprox(sin(pi/5.9),7));
   33 / 65
   > autosimplify = off !;
   > print(rationalapprox(sin(pi/5.9),7));
   33 / 65
See also: print, prec, points, diam, display, verbosity, canonical, taylorrecursions, timing, fullparentheses, midpointmode, hopitalrecursions, remez, rationalapprox, taylor
Go back to the list of commands

Name:

bashevaluate executes a shell command and returns its output as a string

Library names:

sollya_obj_t sollya_lib_bashevaluate(sollya_obj_t, ...) sollya_obj_t sollya_lib_v_bashevaluate(sollya_obj_t, va_list)

Usage:

bashevaluate(command) : string -> string bashevaluate(command,input) : (string, string) -> string

Parameters:

Description:

Example 1:

   > bashevaluate("LANG=C date");
   Mon Oct 14 12:15:54 CEST 2013

Example 2:

   > [| bashevaluate("echo Hello") |];
   [|"Hello"|]

Example 3:

   > a = bashevaluate("sed -e 's/a/e/g;'", "Hallo");
   > a;
   Hello
See also: bashexecute
Go back to the list of commands

Name:

bashexecute executes a shell command.

Library name:

void sollya_lib_bashexecute(sollya_obj_t)

Usage:

bashexecute(command) : string -> void

Parameters:

Description:

Example 1:

   > bashexecute("LANG=C date");
   Mon Oct 14 12:15:58 CEST 2013
See also: execute, readfile, parse, bashevaluate
Go back to the list of commands

Name:

binary special value for global state display

Library names:

sollya_obj_t sollya_lib_binary() int sollya_lib_is_binary(sollya_obj_t)

Description:

See also: decimal, dyadic, powers, hexadecimal, display
Go back to the list of commands

Name:

bind partially applies a procedure to an argument, returning a procedure with one argument less

Usage:

bind(proc, ident, obj) : (procedure, identifier type, any type) -> procedure

Parameters:

Description:

Example 1:

   > procedure add(X,Y) { return X + Y; };
   > succ = bind(add,X,1);
   > succ(5);
   6
   > succ;
   proc(Y)
   {
   nop;
   return (proc(X, Y)
   {
   nop;
   return (X) + (Y);
   })(1, Y);
   }

Example 2:

   > procedure add(X,Y) { return X + Y; };
   > succ = bind(add,X,1);
   > five = bind(succ,Y,4);
   > five();
   5
   > five;
   proc()
   {
   nop;
   return (proc(Y)
   {
   nop;
   return (proc(X, Y)
   {
   nop;
   return (X) + (Y);
   })(1, Y);
   })(4);
   }

Example 3:

   > verbosity = 1!;
   > procedure add(X,Y) { return X + Y; };
   > foo = bind(add,R,1);
   Warning: the given procedure has no argument named "R". The procedure is returned unchanged.
   > foo;
   proc(X, Y)
   {
   nop;
   return (X) + (Y);
   }
See also: procedure, proc, function, @
Go back to the list of commands

Name:

boolean keyword representing a boolean type

Usage:

boolean : type type

Description:

See also: externalproc, constant, function, integer, list of, range, string, object
Go back to the list of commands

Name:

canonical brings all polynomial subexpressions of an expression to canonical form or activates, deactivates or checks canonical form printing

Library names:

void sollya_lib_set_canonical_and_print(sollya_obj_t) void sollya_lib_set_canonical(sollya_obj_t) sollya_obj_t sollya_lib_canonical(sollya_obj_t) sollya_obj_t sollya_lib_get_canonical()

Usage:

canonical(function) : function -> function canonical = activation value : on|off -> void canonical = activation value ! : on|off -> void

Parameters:

Description:

Example 1:

   > print(canonical(1 + x * (x + 3 * x^2)));
   1 + x^2 + 3 * x^3
   > print(canonical((x + 1)^7));
   1 + 7 * x + 21 * x^2 + 35 * x^3 + 35 * x^4 + 21 * x^5 + 7 * x^6 + x^7

Example 2:

   > print(canonical(exp((x + 1)^5) - log(asin(((x + 2) + x)^4 * (x + 1)) + x)));
   exp(1 + 5 * x + 10 * x^2 + 10 * x^3 + 5 * x^4 + x^5) - log(asin(16 + 80 * x + 160 * x^2 + 160 * x^3 + 80 * x^4 + 16 * x^5) + x)

Example 3:

   > canonical;
   off
   > (x + 2)^9;
   512 + x * (2304 + x * (4608 + x * (5376 + x * (4032 + x * (2016 + x * (672 + x * (144 + x * (18 + x))))))))
   > canonical = on;
   Canonical automatic printing output has been activated.
   > (x + 2)^9;
   512 + 2304 * x + 4608 * x^2 + 5376 * x^3 + 4032 * x^4 + 2016 * x^5 + 672 * x^6 + 144 * x^7 + 18 * x^8 + x^9
   > canonical;
   on
   > canonical = off!;
   > (x + 2)^9;
   512 + x * (2304 + x * (4608 + x * (5376 + x * (4032 + x * (2016 + x * (672 + x * (144 + x * (18 + x))))))))
See also: horner, print, autosimplify
Go back to the list of commands

Name:

ceil the usual function ceil.

Library names:

sollya_obj_t sollya_lib_ceil(sollya_obj_t) sollya_obj_t sollya_lib_build_function_ceil(sollya_obj_t) #define SOLLYA_CEIL(x) sollya_lib_build_function_ceil(x)

Description:

See also: floor, nearestint, round, RU
Go back to the list of commands

Name:

chebyshevform computes a rigorous polynomial approximation

Library name:

sollya_obj_t sollya_lib_chebyshevform(sollya_obj_t, sollya_obj_t,                                       sollya_obj_t);

Usage:

chebyshevform(f, n, I) : (function, integer, range) -> list

Parameters:

Description:

Example 1:

   > TL=chebyshevform(exp(x), 10, [-1,1]);
   > p=TL[0];
   > Delta=TL[2];
   > p; Delta;
   1.00000000000000000000000000000000000000000000000017 + x * (1.0000000002738981919773953471453626764777115166417 + x * (0.50000000002276754368023326882542097365411870042311 + x * (0.166666661190450656168988993421371510533693281444003 + x * (4.16666662114404339731887995095915661615696989046437e-2 + x * (8.3333639749825520034240517636254576844423981913792e-3 + x * (1.38889143636148090706862105537216777944219976325265e-3 + x * (1.98342776066472142284727329700227389403558111865906e-4 + x * (2.47957727598277888282218067965324267955768146489014e-5 + x * (2.82540334409824772663163700125420195118047008360658e-6 + x * 2.81369833337188431358280911630401974906330455923616e-7)))))))))
   [-2.71406412827174505775085010461449926572460824320373e-11;2.71406412827174505775085010461449926572460824320373e-11]
See also: taylorform, diff, autodiff, taylor, remez
Go back to the list of commands

Name:

checkinfnorm checks whether the infinity norm of a function is bounded by a value

Library name:

sollya_obj_t sollya_lib_checkinfnorm(sollya_obj_t, sollya_obj_t,                                      sollya_obj_t)

Usage:

checkinfnorm(function,range,constant) : (function, range, constant) -> boolean

Parameters:

Description:

Example 1:

   > checkinfnorm(sin(x),[0;1.75], 1);
   true
   > checkinfnorm(sin(x),[0;1.75], 1/2); checkinfnorm(sin(x),[0;20/39],1/2);
   false
   true

Example 2:

   > p = remez(exp(x), 5, [-1;1]);
   > b = dirtyinfnorm(p - exp(x), [-1;1]);
   > checkinfnorm(p - exp(x), [-1;1], b);
   false
   > b1 = round(b, 15, RU);
   > checkinfnorm(p - exp(x), [-1;1], b1);
   true
   > b2 = round(b, 25, RU);
   > checkinfnorm(p - exp(x), [-1;1], b2);
   false
   > diam = 1b-20!;
   > checkinfnorm(p - exp(x), [-1;1], b2);
   true
See also: infnorm, dirtyinfnorm, supnorm, accurateinfnorm, remez, diam
Go back to the list of commands

Name:

coeff gives the coefficient of degree n of a polynomial

Library name:

sollya_obj_t sollya_lib_coeff(sollya_obj_t, sollya_obj_t)

Usage:

coeff(f,n) : (function, integer) -> constant

Parameters:

Description:

Example 1:

   > coeff((1+x)^5,3);
   10

Example 2:

   > coeff(sin(x),0);
   0
See also: degree, roundcoefficients, subpoly
Go back to the list of commands

Name:

composepolynomials computes an approximation to the composition of two polynomials and bounds the error

Library name:

sollya_obj_t sollya_lib_composepolynomials(sollya_obj_t, sollya_obj_t)

Usage:

composepolynomials(p,q) : (function, function) -> structure

Parameters:

Description:

Example 1:

   > composepolynomials(1 + 2 * x + 3 * x^2 + 4 * x^3, 5 + 6 * x + 7 * x^2);
   { .radii = [|[0;0], [0;0], [0;0], [0;0], [0;0], [0;0], [0;0]|], .poly = 586 + x * (1992 + x * (4592 + x * (6156 + x * (6111 + x * (3528 + x * 1372))))) }

Example 2:

   > print(composepolynomials(1/5 * x + exp(17) + log(2) * x^2, x^4 + 1/3 * x^2));
   { .radii = [|[-3.58732406867153170156474773322218529607747057120388e-43;3.58732406867153170156474773322218529607747057120388e-43], [0;0], [-2.67276471009219564614053646715148187881519688010505e-51;2.67276471009219564614053646715148187881519688010505e-51], [0;0], [-1.06910588403687825845621458686059275152607875204202e-50;1.06910588403687825845621458686059275152607875204202e-50], [0;0], [-2.13821176807375651691242917372118550305215750408404e-50;2.13821176807375651691242917372118550305215750408404e-50], [0;0], [-1.06910588403687825845621458686059275152607875204202e-50;1.06910588403687825845621458686059275152607875204202e-50]|], .poly = 2.41549527535752982147754351803858238798675673527228e7 + x^2 * (6.6666666666666666666666666666666666666666666666666e-2 + x^2 * (0.277016353395549478824136902384241840897277792706698 + x^2 * (0.46209812037329687294482141430545104538366675624017 + x^2 * 0.693147180559945309417232121458176568075500134360259))) }

Example 3:

   > composepolynomials(sin(x),x + x^2);
   { .radii = [| |], .poly = sin(x * (1 + x)) }
See also: substitute
Go back to the list of commands

Name:

@ concatenates two lists or strings or applies a list as arguments to a procedure

Library name:

sollya_obj_t sollya_lib_concat(sollya_obj_t, sollya_obj_t)

Usage:

L1@L2 : (list, list) -> list string1@string2 : (string, string) -> string proc@L1 : (procedure, list) -> any type

Parameters:

Description:

Example 1:

   > [|1,...,3|]@[|7,8,9|];
   [|1, 2, 3, 7, 8, 9|]

Example 2:

   > "Hello "@"World!";
   Hello World!

Example 3:

   > procedure cool(a,b,c) {
     write(a,", ", b," and ",c," are cool guys.\n");
     };
   > cool @ [| "Christoph", "Mioara", "Sylvain" |];
   Christoph, Mioara and Sylvain are cool guys.

Example 4:

   > procedure sayhello() {
     "Hello! how are you?";
     };
   > sayhello();
   Hello! how are you?
   > sayhello @ [||];
   Hello! how are you?

Example 5:

   > procedure add(L = ...) {
     var acc, i;
     acc = 0;
     for i in L do acc = i + acc;
     return acc;
     };
   > add(1,2);
   3
   > add(1,2,3);
   6
   > add @ [|1, 2|];
   3
   > add @ [|1, 2, 3|];
   6
   > add @ [||];
   0
See also: .:, :., procedure, proc, bind
Go back to the list of commands

Name:

constant keyword representing a constant type

Usage:

constant : type type

Description:

See also: externalproc, boolean, function, integer, list of, range, string, object
Go back to the list of commands

Name:

cos the cosine function.

Library names:

sollya_obj_t sollya_lib_cos(sollya_obj_t) sollya_obj_t sollya_lib_build_function_cos(sollya_obj_t) #define SOLLYA_COS(x) sollya_lib_build_function_cos(x)

Description:

See also: acos, sin, tan
Go back to the list of commands

Name:

cosh the hyperbolic cosine function.

Library names:

sollya_obj_t sollya_lib_cosh(sollya_obj_t) sollya_obj_t sollya_lib_build_function_cosh(sollya_obj_t) #define SOLLYA_COSH(x) sollya_lib_build_function_cosh(x)

Description:

See also: acosh, sinh, tanh, exp
Go back to the list of commands

Name:

D short form for double
See also: double
Go back to the list of commands

Name:

DD short form for doubledouble
See also: doubledouble
Go back to the list of commands

Name:

DE short form for doubleextended
See also: doubleextended
Go back to the list of commands

Name:

decimal special value for global state display

Library names:

sollya_obj_t sollya_lib_decimal() int sollya_lib_is_decimal(sollya_obj_t)

Description:

See also: dyadic, powers, hexadecimal, binary, display
Go back to the list of commands

Name:

default default value for some commands.

Library names:

sollya_obj_t sollya_lib_default() int sollya_lib_is_default(sollya_obj_t)

Description:

Example 1:

   > p = remez(exp(x),5,[0;1],default,1e-5);
   > q = remez(exp(x),5,[0;1],1,1e-5);
   > p==q;
   true

Example 2:

   > prec;
   165
   > prec=200;
   The precision has been set to 200 bits.
Go back to the list of commands

Name:

degree gives the degree of a polynomial.

Library name:

sollya_obj_t sollya_lib_degree(sollya_obj_t)

Usage:

degree(f) : function -> integer

Parameters:

Description:

Example 1:

   > degree((1+x)*(2+5*x^2));
   3
   > degree(0);
   0

Example 2:

   > degree(sin(x));
   -1
See also: coeff, subpoly, roundcoefficients
Go back to the list of commands

Name:

denominator gives the denominator of an expression

Library name:

sollya_obj_t sollya_lib_denominator(sollya_obj_t)

Usage:

denominator(expr) : function -> function

Parameters:

Description:

Example 1:

   > denominator(5/3);
   3

Example 2:

   > denominator(exp(x));
   1

Example 3:

   > a = 5/3;
   > b = numerator(a)/denominator(a);
   > print(a);
   5 / 3
   > print(b);
   5 / 3

Example 4:

   > a = exp(x/3);
   > b = numerator(a)/denominator(a);
   > print(a);
   exp(x / 3)
   > print(b);
   exp(x / 3)
See also: numerator, rationalmode
Go back to the list of commands

Name:

diam parameter used in safe algorithms of Sollya and controlling the maximal length of the involved intervals.

Library names:

void sollya_lib_set_diam_and_print(sollya_obj_t) void sollya_lib_set_diam(sollya_obj_t) sollya_obj_t sollya_lib_get_diam()

Usage:

diam = width : constant -> void diam = width ! : constant -> void diam : constant

Parameters:

Description:

See also: infnorm, checkinfnorm, accurateinfnorm, integral, findzeros, supnorm
Go back to the list of commands

Name:

dieonerrormode global variable controlling if Sollya is exited on an error or not.

Library names:

void sollya_lib_set_dieonerrormode_and_print(sollya_obj_t) void sollya_lib_set_dieonerrormode(sollya_obj_t) sollya_obj_t sollya_lib_get_dieonerrormode()

Usage:

dieonerrormode = activation value : on|off -> void dieonerrormode = activation value ! : on|off -> void dieonerrormode : on|off

Parameters:

Description:

Example 1:

   > verbosity = 1!;
   > dieonerrormode = off;
   Die-on-error mode has been deactivated.
   > for i from true to false do i + "Salut";
   Warning: one of the arguments of the for loop does not evaluate to a constant.
   The for loop will not be executed.
   > exp(17);
   Warning: rounding has happened. The value displayed is a faithful rounding to 165 bits of the true result.
   2.41549527535752982147754351803858238798675673527224e7

Example 2:

   > verbosity = 1!;
   > dieonerrormode = off!;
   > 5 */  4;
   Warning: syntax error, unexpected /.
   The last symbol read has been "/".
   Will skip input until next semicolon after the unexpected token. May leak memory.
     exp(17);
   Warning: rounding has happened. The value displayed is a faithful rounding to 165 bits of the true result.
   2.41549527535752982147754351803858238798675673527224e7

Example 3:

   > verbosity = 1!;
   > dieonerrormode;
   off
   > dieonerrormode = on!;
   > dieonerrormode;
   on
   > for i from true to false do i + "Salut";
   Warning: one of the arguments of the for loop does not evaluate to a constant.
   The for loop will not be executed.
   Warning: some syntax, typing or side-effect error has occurred.
   As the die-on-error mode is activated, the tool will be exited.

Example 4:

   > verbosity = 1!;
   > dieonerrormode = on!;
   > 5 */  4;
   Warning: syntax error, unexpected /.
   The last symbol read has been "/".
   Will skip input until next semicolon after the unexpected token. May leak memory.
   Warning: some syntax, typing or side-effect error has occurred.
   As the die-on-error mode is activated, the tool will be exited.

Example 5:

   > verbosity = 0!;
   > dieonerrormode = on!;
   > 5 */  4;
See also: on, off, verbosity, error
Go back to the list of commands

Name:

diff differentiation operator

Library name:

sollya_obj_t sollya_lib_diff(sollya_obj_t)

Usage:

diff(function) : function -> function

Parameters:

Description:

Example 1:

   > diff(sin(x));
   cos(x)

Example 2:

   > diff(x);
   1

Example 3:

   > diff(x^x);
   x^x * (1 + log(x))
See also: library, autodiff, taylor, taylorform
Go back to the list of commands

Name:

dirtyfindzeros gives a list of numerical values listing the zeros of a function on an interval.

Library name:

sollya_obj_t sollya_lib_dirtyfindzeros(sollya_obj_t, sollya_obj_t)

Usage:

dirtyfindzeros(f,I) : (function, range) -> list

Parameters:

Description:

Example 1:

   > dirtyfindzeros(sin(x),[-5;5]);
   [|-3.14159265358979323846264338327950288419716939937508, 0, 3.14159265358979323846264338327950288419716939937508|]

Example 2:

   > L1=dirtyfindzeros(x^2*sin(1/x),[0;1]);
   > points=1000!;
   > L2=dirtyfindzeros(x^2*sin(1/x),[0;1]);
   > length(L1); length(L2);
   18
   25
See also: prec, points, findzeros, dirtyinfnorm, numberroots
Go back to the list of commands

Name:

dirtyinfnorm computes a numerical approximation of the infinity norm of a function on an interval.

Library name:

sollya_obj_t sollya_lib_dirtyinfnorm(sollya_obj_t, sollya_obj_t)

Usage:

dirtyinfnorm(f,I) : (function, range) -> constant

Parameters:

Description:

Example 1:

   > dirtyinfnorm(sin(x),[-10;10]);
   1

Example 2:

   > prec=15!;
   > dirtyinfnorm(exp(cos(x))*sin(x),[0;5]);
   1.45856
   > prec=40!;
   > dirtyinfnorm(exp(cos(x))*sin(x),[0;5]);
   1.458528537135
   > prec=100!;
   > dirtyinfnorm(exp(cos(x))*sin(x),[0;5]);
   1.458528537136237644438147455024
   > prec=200!;
   > dirtyinfnorm(exp(cos(x))*sin(x),[0;5]);
   1.458528537136237644438147455023841718299214087993682374094153

Example 3:

   > dirtyinfnorm(x^2, [log(0);log(1)]);
   @NaN@
See also: prec, points, infnorm, checkinfnorm, supnorm
Go back to the list of commands

Name:

dirtyintegral computes a numerical approximation of the integral of a function on an interval.

Library name:

sollya_obj_t sollya_lib_dirtyintegral(sollya_obj_t, sollya_obj_t)

Usage:

dirtyintegral(f,I) : (function, range) -> constant

Parameters:

Description:

Example 1:

   > sin(10);
   -0.54402111088936981340474766185137728168364301291621
   > dirtyintegral(cos(x),[0;10]);
   -0.54400304905152629822448058882475382036536298356281
   > points=2000!;
   > dirtyintegral(cos(x),[0;10]);
   -0.54401997751158321972222697312583199035995837926892
See also: prec, points, integral
Go back to the list of commands

Name:

dirtysimplify simplifies an expression representing a function

Library name:

sollya_obj_t sollya_lib_dirtysimplify(sollya_obj_t)

Usage:

dirtysimplify(function) : function -> function

Parameters:

Description:

Example 1:

   > print(dirtysimplify(sin(pi * x)));
   sin(3.14159265358979323846264338327950288419716939937508 * x)
   > print(dirtysimplify(erf(exp(3) + x * log(4))));
   erf(2.00855369231876677409285296545817178969879078385544e1 + x * 1.3862943611198906188344642429163531361510002687205)

Example 2:

   > prec = 20!;
   > t = erf(0.5);
   > s = dirtysimplify(erf(0.5));
   > prec = 200!;
   > t;
   0.5204998778130465376827466538919645287364515757579637000588058
   > s;
   0.52050018310546875
See also: simplify, autosimplify, prec, evaluate, horner, rationalmode
Go back to the list of commands

Name:

display sets or inspects the global variable specifying number notation

Library names:

void sollya_lib_set_display_and_print(sollya_obj_t) void sollya_lib_set_display(sollya_obj_t) sollya_obj_t sollya_lib_get_display()

Usage:

display = notation value : decimal|binary|dyadic|powers|hexadecimal -> void display = notation value ! : decimal|binary|dyadic|powers|hexadecimal -> void display : decimal|binary|dyadic|powers|hexadecimal

Parameters:

Description:

Example 1:

   > display = decimal;
   Display mode is decimal numbers.
   > a = evaluate(sin(pi * x), 0.25);
   > a;
   0.70710678118654752440084436210484903928483593768847
   > display = binary;
   Display mode is binary numbers.
   > a;
   1.01101010000010011110011001100111111100111011110011001001000010001011001011111011000100110110011011101010100101010111110100111110001110101101111011000001011101010001_2 * 2^(-1)
   > display = hexadecimal;
   Display mode is hexadecimal numbers.
   > a;
   0xb.504f333f9de6484597d89b3754abe9f1d6f60ba88p-4
   > display = dyadic;
   Display mode is dyadic numbers.
   > a;
   33070006991101558613323983488220944360067107133265b-165
   > display = powers;
   Display mode is dyadic numbers in integer-power-of-2 notation.
   > a;
   33070006991101558613323983488220944360067107133265 * 2^(-165)
See also: print, write, decimal, dyadic, powers, binary, hexadecimal, prec
Go back to the list of commands

Name:

/ division function

Library names:

sollya_obj_t sollya_lib_div(sollya_obj_t, sollya_obj_t) sollya_obj_t sollya_lib_build_function_div(sollya_obj_t, sollya_obj_t) #define SOLLYA_DIV(x,y) sollya_lib_build_function_div((x), (y))

Usage:

function1 / function2 : (function, function) -> function interval1 / interval2 : (range, range) -> range interval1 / constant : (range, constant) -> range interval1 / constant : (constant, range) -> range

Parameters:

Description:

Example 1:

   > 5 / 2;
   2.5

Example 2:

   > x / 2;
   x * 0.5

Example 3:

   > x / x;
   1

Example 4:

   > 3 / 0;
   @NaN@

Example 5:

   > diff(sin(x) / exp(x));
   (exp(x) * cos(x) - sin(x) * exp(x)) / exp(x)^2

Example 6:

   > [1;2] / [3;4];
   [0.25;0.66666666666666666666666666666666666666666666666668]
   > [1;2] / 17;
   [5.8823529411764705882352941176470588235294117647058e-2;0.11764705882352941176470588235294117647058823529412]
   > -13 / [4;17];
   [-3.25;-0.76470588235294117647058823529411764705882352941175]
See also: +, -, *, ^
Go back to the list of commands

Names:

double, D rounding to the nearest IEEE 754 double (binary64).

Library names:

sollya_obj_t sollya_lib_double(sollya_obj_t) sollya_obj_t sollya_lib_double_obj() int sollya_lib_is_double_obj(sollya_obj_t) sollya_obj_t sollya_lib_build_function_double(sollya_obj_t) #define SOLLYA_D(x) sollya_lib_build_function_double(x)

Description:

Example 1:

   > display=binary!;
   > D(0.1);
   1.100110011001100110011001100110011001100110011001101_2 * 2^(-4)
   > D(4.17);
   1.000010101110000101000111101011100001010001111010111_2 * 2^(2)
   > D(1.011_2 * 2^(-1073));
   1.1_2 * 2^(-1073)
See also: halfprecision, single, doubleextended, doubledouble, quad, tripledouble, roundcoefficients, implementpoly, round, printdouble
Go back to the list of commands

Names:

doubledouble, DD represents a number as the sum of two IEEE doubles.

Library names:

sollya_obj_t sollya_lib_double_double(sollya_obj_t) sollya_obj_t sollya_lib_double_double_obj() int sollya_lib_is_double_double_obj(sollya_obj_t) sollya_obj_t sollya_lib_build_function_double_double(sollya_obj_t) #define SOLLYA_DD(x) sollya_lib_build_function_double_double(x)

Description:

Example 1:

   > verbosity=1!;
   > a = 1+ 2^(-100);
   > DD(a);
   1.0000000000000000000000000000007888609052210118054
   > prec=50!;
   > DD(a);
   1.0000000000000000000000000000008
See also: halfprecision, single, double, doubleextended, quad, tripledouble, roundcoefficients, implementpoly, round
Go back to the list of commands

Names:

doubleextended, DE computes the nearest number with 64 bits of mantissa.

Library names:

sollya_obj_t sollya_lib_doubleextended(sollya_obj_t) sollya_obj_t sollya_lib_doubleextended_obj() int sollya_lib_is_doubleextended_obj(sollya_obj_t) sollya_obj_t sollya_lib_build_function_doubleextended(sollya_obj_t) #define SOLLYA_DE(x) sollya_lib_build_function_doubleextended(x)

Description:

Example 1:

   > display=binary!;
   > DE(0.1);
   1.100110011001100110011001100110011001100110011001100110011001101_2 * 2^(-4)
   > round(0.1,64,RN);
   1.100110011001100110011001100110011001100110011001100110011001101_2 * 2^(-4)

Example 2:

   > D(2^(-2000));
   0
   > DE(2^(-20000));
   0

Example 3:

   > verbosity=1!;
   > f = sin(DE(x));
   > f(pi);
   Warning: rounding has happened. The value displayed is a faithful rounding to 165 bits of the true result.
   -5.0165576126683320235573270803307570138315616702549e-20
   > g = sin(round(x,64,RN));
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
See also: roundcoefficients, halfprecision, single, double, doubledouble, quad, tripledouble, round
Go back to the list of commands

Name:

dyadic special value for global state display

Library names:

sollya_obj_t sollya_lib_dyadic() int sollya_lib_is_dyadic(sollya_obj_t)

Description:

See also: decimal, powers, hexadecimal, binary, display
Go back to the list of commands

Name:

== equality test operator

Library name:

sollya_obj_t sollya_lib_cmp_equal(sollya_obj_t, sollya_obj_t)

Usage:

expr1 == expr2 : (any type, any type) -> boolean

Parameters:

Description:

Example 1:

   > "Hello" == "Hello";
   true
   > "Hello" == "Salut";
   false
   > "Hello" == 5;
   false
   > 5 + x == 5 + x;
   true

Example 2:

   > 1 == exp(0);
   true
   > asin(1) * 2 == pi;
   true
   > exp(5) == log(4);
   false

Example 3:

   > sin(pi/6) == 1/4;
   false

Example 4:

   > prec = 12;
   The precision has been set to 12 bits.
   > verbosity = 1!;
   > 16384.1 == 16385.1;
   Warning: Rounding occurred when converting the constant "16384.1" to floating-point with 12 bits.
   If safe computation is needed, try to increase the precision.
   Warning: Rounding occurred when converting the constant "16385.1" to floating-point with 12 bits.
   If safe computation is needed, try to increase the precision.
   true

Example 5:

   > error == error;
   false

Example 6:

   > a = "Biba";
   > b = NaN;
   > a == a;
   true
   > b == b;
   false
See also: !=, >, >=, <=, <, in, !, &&, ||, error, prec
Go back to the list of commands

Name:

erfc the complementary error function.

Library names:

sollya_obj_t sollya_lib_erfc(sollya_obj_t) sollya_obj_t sollya_lib_build_function_erfc(sollya_obj_t) #define SOLLYA_ERFC(x) sollya_lib_build_function_erfc(x)

Description:

See also: erf
Go back to the list of commands

Name:

erf the error function.

Library names:

sollya_obj_t sollya_lib_erf(sollya_obj_t) sollya_obj_t sollya_lib_build_function_erf(sollya_obj_t) #define SOLLYA_ERF(x) sollya_lib_build_function_erf(x)

Description:

See also: erfc, exp
Go back to the list of commands

Name:

error expression representing an input that is wrongly typed or that cannot be executed

Library names:

sollya_obj_t sollya_lib_error() int sollya_lib_obj_is_error(sollya_obj_t)

Usage:

error : error

Description:

Example 1:

   > print(5 + "foo");
   error

Example 2:

   > error;
   error

Example 3:

   > error == error;
   false
   > error != error;
   false

Example 4:

   > correct = 5 + 6;
   > incorrect = 5 + "foo";
   > correct == correct;
   true
   > incorrect == incorrect;
   false
   > errorhappened = !(incorrect == incorrect);
   > errorhappened;
   true
See also: void, parse, ==, !=
Go back to the list of commands

Name:

evaluate evaluates a function at a constant point or in a range

Library name:

sollya_obj_t sollya_lib_evaluate(sollya_obj_t, sollya_obj_t)

Usage:

evaluate(function, constant) : (function, constant) -> constant | range evaluate(function, range) : (function, range) -> range evaluate(function, function2) : (function, function) -> function

Parameters:

Description:

Example 1:

   > midpointmode=on!;
   > print(evaluate(sin(pi * x), 2.25));
   0.70710678118654752440084436210484903928483593768847
   > print(evaluate(sin(pi * x), [2.25; 2.25]));
   0.707106781186547524400844362104849039284835937688~4/5~

Example 2:

   > print(evaluate(sin(pi * x), 2));
   [-1.72986452514381269516508615031098129542836767991679e-12715;7.5941198201187963145069564314525661706039084390067e-12716]

Example 3:

   > print(evaluate(sin(pi * x), [2, 2.25]));
   [-5.143390272677254630046998919961912407349224165421e-50;0.70710678118654752440084436210484903928483593768866]

Example 4:

   > print(evaluate(sin(pi * x), 2 + 0.25 * x));
   sin((pi) * (2 + 0.25 * x))

Example 5:

   > print(evaluate(sin(pi * 1/x), 0));
   [-1;1]
See also: isevaluable
Go back to the list of commands

Name:

execute executes the content of a file

Usage:

execute(filename) : string -> void

Parameters:

Description:

Example 1:

   > a=2;
   > a;
   2
   > print("a=1;") > "example.sollya";
   > execute("example.sollya");
   > a;
   1

Example 2:

   > verbosity=1!;
   > print("a=1; restart; a=2;") > "example.sollya";
   > execute("example.sollya");
   Warning: a restart command has been used in a file read into another.
   This restart command will be neglected.
   > a;
   2

Example 3:

   > verbosity=1!;
   > print("a=1; quit; a=2;") > "example.sollya";
   > execute("example.sollya");
   Warning: the execution of a file read by execute demanded stopping the interpretation but it is not stopped.
   > a;
   1
See also: parse, readfile, write, print, bashexecute, quit, restart
Go back to the list of commands

Name:

expand expands polynomial subexpressions

Library name:

sollya_obj_t sollya_lib_expand(sollya_obj_t)

Usage:

expand(function) : function -> function

Parameters:

Description:

Example 1:

   > print(expand(x^3));
   x * x * x

Example 2:

   > print(expand((x + 2)^3 + 2 * x));
   8 + 12 * x + 6 * x * x + x * x * x + 2 * x

Example 3:

   > print(expand(exp((x + (x + 3))^5)));
   exp(243 + 405 * x + 270 * x * x + 90 * x * x * x + 15 * x * x * x * x + x * x * x * x * x + x * 405 + 108 * x * 5 * x + 54 * x * x * 5 * x + 12 * x * x * x * 5 * x + x * x * x * x * 5 * x + x * x * 270 + 27 * x * x * x * 10 + 9 * x * x * x * x * 10 + x * x * x * x * x * 10 + x * x * x * 90 + 6 * x * x * x * x * 10 + x * x * x * x * x * 10 + x * x * x * x * 5 * x + 15 * x * x * x * x + x * x * x * x * x)
See also: dirtysimplify, simplify, horner, coeff, degree
Go back to the list of commands

Name:

exp the exponential function.

Library names:

sollya_obj_t sollya_lib_exp(sollya_obj_t) sollya_obj_t sollya_lib_build_function_exp(sollya_obj_t) #define SOLLYA_EXP(x) sollya_lib_build_function_exp(x)

Description:

See also: exp, log
Go back to the list of commands

Name:

expm1 shifted exponential function.

Library names:

sollya_obj_t sollya_lib_expm1(sollya_obj_t) sollya_obj_t sollya_lib_build_function_expm1(sollya_obj_t) #define SOLLYA_EXPM1(x) sollya_lib_build_function_expm1(x)

Description:

See also: exp
Go back to the list of commands

Name:

exponent returns the scaled binary exponent of a number.

Library name:

sollya_obj_t sollya_lib_exponent(sollya_obj_t)

Usage:

exponent(x) : constant -> integer

Parameters:

Description:

Example 1:

   > a=round(Pi,20,RN);
   > e=exponent(a);
   > e;
   -17
   > m=mantissa(a);
   > a-m*2^e;
   0
See also: mantissa, precision
Go back to the list of commands

Name:

externalplot plots the error of an external code with regard to a function

Library names:

void sollya_lib_externalplot(sollya_obj_t, sollya_obj_t, sollya_obj_t,                              sollya_obj_t, sollya_obj_t, ...) void sollya_lib_v_externalplot(sollya_obj_t, sollya_obj_t, sollya_obj_t,                                sollya_obj_t, sollya_obj_t, va_list)

Usage:

externalplot(filename, mode, function, range, precision) : (string, absolute|relative, function, range, integer) -> void externalplot(filename, mode, function, range, precision, perturb) : (string, absolute|relative, function, range, integer, perturb) -> void externalplot(filename, mode, function, range, precision, plot mode, result filename) : (string, absolute|relative, function, range, integer, file|postscript|postscriptfile, string) -> void externalplot(filename, mode, function, range, precision, perturb, plot mode, result filename) : (string, absolute|relative, function, range, integer, perturb, file|postscript|postscriptfile, string) -> void

Description:

Example 1:

   > bashexecute("gcc -fPIC -c externalplotexample.c");
   > bashexecute("gcc -shared -o externalplotexample externalplotexample.o -lgmp -lmpfr");
   > externalplot("./externalplotexample",relative,exp(x),[-1/2;1/2],12,perturb);
See also: plot, asciiplot, perturb, absolute, relative, file, postscript, postscriptfile, bashexecute, externalproc, library
Go back to the list of commands

Name:

externalproc binds an external code to a Sollya procedure

Usage:

externalproc(identifier, filename, argumenttype -> resulttype) : (identifier type, string, type type, type type) -> void

Parameters:

Description:

Example 1:

   > bashexecute("gcc -fPIC -Wall -c externalprocexample.c");
   > bashexecute("gcc -fPIC -shared -o externalprocexample externalprocexample.o");
   > externalproc(foo, "./externalprocexample", (integer, integer) -> integer);
   > foo;
   foo(integer, integer) -> integer
   > foo(5, 6);
   11
   > verbosity = 1!;
   > foo();
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
   error
   > a = foo;
   > a(5,6);
   11
See also: library, libraryconstant, externalplot, bashexecute, void, constant, function, range, integer, string, boolean, list of
Go back to the list of commands

Name:

false the boolean value representing the false.

Library names:

sollya_obj_t sollya_lib_false() int sollya_lib_is_false(sollya_obj_t)

Description:

Example 1:

   > true && false;
   false
   > 2<1;
   false
See also: true, &&, ||
Go back to the list of commands

Name:

file special value for commands plot and externalplot

Library names:

sollya_obj_t sollya_lib_file() int sollya_lib_is_file(sollya_obj_t)

Description:

Example 1:

   > savemode=file;
   > name="plotSinCos";
   > plot(sin(x),0,cos(x),[-Pi,Pi],savemode, name);
See also: externalplot, plot, postscript, postscriptfile
Go back to the list of commands

Name:

findzeros gives a list of intervals containing all zeros of a function on an interval.

Library name:

sollya_obj_t sollya_lib_findzeros(sollya_obj_t, sollya_obj_t)

Usage:

findzeros(f,I) : (function, range) -> list

Parameters:

Description:

Example 1:

   > findzeros(sin(x),[-5;5]);
   [|[-3.14208984375;-3.140869140625], [-1.220703125e-3;1.220703125e-3], [3.140869140625;3.14208984375]|]
   > diam=1e-10!;
   > findzeros(sin(x),[-5;5]);
   [|[-3.14159265370108187198638916015625;-3.141592652536928653717041015625], [-1.16415321826934814453125e-9;1.16415321826934814453125e-9], [3.141592652536928653717041015625;3.14159265370108187198638916015625]|]
See also: dirtyfindzeros, infnorm, prec, diam, taylorrecursions, hopitalrecursions, numberroots
Go back to the list of commands

Name:

fixed indicates that fixed-point formats should be used for fpminimax

Library names:

sollya_obj_t sollya_lib_fixed() int sollya_lib_is_fixed(sollya_obj_t)

Usage:

fixed : fixed|floating

Description:

Example 1:

   > fpminimax(cos(x),6,[|32,32,32,32,32,32,32|],[-1;1],fixed);
   0.9999997480772435665130615234375 + x^2 * (-0.4999928693287074565887451171875 + x^2 * (4.163351492024958133697509765625e-2 + x^2 * (-1.338223926723003387451171875e-3)))
See also: fpminimax, floating
Go back to the list of commands

Name:

floating indicates that floating-point formats should be used for fpminimax

Library names:

sollya_obj_t sollya_lib_floating() int sollya_lib_is_floating(sollya_obj_t)

Usage:

floating : fixed|floating

Description:

Example 1:

   > fpminimax(cos(x),6,[|D...|],[-1;1],floating);
   0.99999974816012215939053930924274027347564697265625 + x * (-2.79593179695850233444023069510765565920208989246498e-15 + x * (-0.49999286980201401719980935922649223357439041137695 + x * (4.0484539189054105169841244454207387920433372507922e-14 + x * (4.16335155289191682914662351322476752102375030517578e-2 + x * (-4.015858818743733758578949218474363725507386355118e-14 + x * (-1.33822408854837810246452001194938929984346032142639e-3))))))
See also: fpminimax, fixed
Go back to the list of commands

Name:

floor the usual function floor.

Library names:

sollya_obj_t sollya_lib_floor(sollya_obj_t) sollya_obj_t sollya_lib_build_function_floor(sollya_obj_t) #define SOLLYA_FLOOR(x) sollya_lib_build_function_floor(x)

Description:

See also: ceil, nearestint, round, RD
Go back to the list of commands

Name:

fpminimax computes a good polynomial approximation with fixed-point or floating-point coefficients

Library names:

sollya_obj_t sollya_lib_fpminimax(sollya_obj_t, sollya_obj_t, sollya_obj_t,                                   sollya_obj_t, ...) sollya_obj_t sollya_lib_v_fpminimax(sollya_obj_t, sollya_obj_t,                                     sollya_obj_t, sollya_obj_t, va_list)

Usage:

fpminimax(f, n, formats, range, indic1, indic2, indic3, P) : (function, integer, list, range, absolute|relative | fixed|floating | function, absolute|relative | fixed|floating | function, absolute|relative | fixed|floating | function, function) -> function fpminimax(f, monomials, formats, range, indic1, indic2, indic3, P) : (function, list, list, range, absolute|relative | fixed|floating | function, absolute|relative | fixed|floating | function, absolute|relative | fixed|floating | function, function) -> function fpminimax(f, n, formats, L, indic1, indic2, indic3, P) : (function, integer, list, list, absolute|relative | fixed|floating | function, absolute|relative | fixed|floating | function, absolute|relative | fixed|floating | function, function) -> function fpminimax(f, monomials, formats, L, indic1, indic2, indic3, P) : (function, list, list, list, absolute|relative | fixed|floating | function, absolute|relative | fixed|floating | function, absolute|relative | fixed|floating | function, function) -> function

Parameters:

Description:

Example 1:

   > P = fpminimax(cos(x),6,[|DD, DD, D...|],[-1b-5;1b-5]);
   > printexpansion(P);
   (0x3ff0000000000000 + 0xbc09fda15e029b00) + x * ((0x3af9eb57163024a8 + 0x37942c2f3f3e3839) + x * (0xbfdfffffffffff98 + x * (0xbbd1693f9c028849 + x * (0x3fa5555555145337 + x * (0x3c7a25f610ad9ebc + x * 0xbf56c138142da5b0)))))

Example 2:

   > P = fpminimax(sin(x),6,[|32...|],[-1b-5;1b-5], fixed, absolute);
   > display = powers!;
   > P;
   x * (1 + x^2 * (-357913941 * 2^(-31) + x^2 * (35789873 * 2^(-32))))

Example 3:

   > P = fpminimax(exp(x), [|3,4|], [|D,24|], [-1/256; 1/246], 1+x+x^2/2);
   > display = powers!;
   > P;
   1 + x * (1 + x * (1 * 2^(-1) + x * (375300225001191 * 2^(-51) + x * (5592621 * 2^(-27)))))

Example 4:

   > f = cos(exp(x));
   > pstar = remez(f, 5, [-1b-7;1b-7]);
   > listpoints = dirtyfindzeros(f-pstar, [-1b-7; 1b-7]);
   > P1 = fpminimax(f, 5, [|DD...|], listpoints, absolute, default, default, pstar);
   > P2 = fpminimax(f, 5, [|D...|], listpoints, absolute, default, default, pstar);
   > P3 = fpminimax(f, 5, [|D, D, D, 24...|], listpoints, absolute, default, default, pstar);
   > print("Error of pstar: ", dirtyinfnorm(f-pstar, [-1b-7; 1b-7]));
   Error of pstar:  7.9048441259903026332577436001060063099817726177425e-16
   > print("Error of P1:    ", dirtyinfnorm(f-P1, [-1b-7; 1b-7]));
   Error of P1:     7.9048441259903026580081299123420463921479618202064e-16
   > print("Error of P2:    ", dirtyinfnorm(f-P2, [-1b-7; 1b-7]));
   Error of P2:     8.2477144579950871737109573536791331686347620955984e-16
   > print("Error of P3:    ", dirtyinfnorm(f-P3, [-1b-7; 1b-7]));
   Error of P3:     1.08454277156993282593701156841863009789063333951055e-15

Example 5:

   > L = [|exp(x), sin(x), cos(x)-1, sin(x^3)|];
   > g = (2^x-1)/x;
   > p = fpminimax(g, L, [|D...|], [-1/16;1/16],absolute);
   > display = powers!;
   > p;
   -3267884797436153 * 2^(-54) * sin(x^3) + 5247089102535885 * 2^(-53) * (cos(x) - 1) + -8159095033730771 * 2^(-54) * sin(x) + 6243315658446641 * 2^(-53) * exp(x)

Example 6:

   > n = 9;
   > T = [|1, x|];
   > for i from 2 to n do T[i] = canonical(2*x*T[i-1]-T[i-2]);
   > g = (2^x-1)/x;
   > PCheb = fpminimax(g, T, [|DD,DE...|], [-1/16;1/16],absolute);
   > display = dyadic!;
   > print(PCheb);
   8733930098894247371b-98 * (9 * x + -120 * x^3 + 432 * x^5 + -576 * x^7 + 256 * x^9) + 15750497046710770365b-94 * (1 + -32 * x^2 + 160 * x^4 + -256 * x^6 + 128 * x^8) + 6467380330985872933b-88 * (-7 * x + 56 * x^3 + -112 * x^5 + 64 * x^7) + 9342762606926218927b-84 * (-1 + 18 * x^2 + -48 * x^4 + 32 * x^6) + 11814521367456461131b-80 * (5 * x + -20 * x^3 + 16 * x^5) + 6405479474328570593b-75 * (1 + -8 * x^2 + 8 * x^4) + 11584457324781949889b-72 * (-3 * x + 4 * x^3) + 16779705312447201161b-69 * (-1 + 2 * x^2) + 18265014280997359319b-66 * x + 117054497448175143902009975397253b-107
See also: remez, dirtyfindzeros, absolute, relative, fixed, floating, default, halfprecision, single, double, doubleextended, doubledouble, quad, tripledouble, implementpoly, coeff, degree, roundcoefficients, guessdegree
Go back to the list of commands

Name:

fullparentheses activates, deactivates or inspects the state variable controlling output with full parenthesising

Library names:

void sollya_lib_set_fullparentheses_and_print(sollya_obj_t); void sollya_lib_set_fullparentheses(sollya_obj_t); sollya_obj_t sollya_lib_get_fullparentheses();

Usage:

fullparentheses = activation value : on|off -> void fullparentheses = activation value ! : on|off -> void

Parameters:

Description:

Example 1:

   > autosimplify = off!;
   > fullparentheses = off;
   Full parentheses mode has been deactivated.
   > print(1 + 2 + 3);
   1 + 2 + 3
   > fullparentheses = on;
   Full parentheses mode has been activated.
   > print(1 + 2 + 3);
   (1 + 2) + 3
See also: print, write, autosimplify
Go back to the list of commands

Name:

function keyword for declaring a procedure-based function or a keyword representing a function type

Library names:

sollya_obj_t sollya_lib_procedurefunction(sollya_obj_t, sollya_obj_t) sollya_obj_t sollya_lib_build_function_procedurefunction(sollya_obj_t,                                                          sollya_obj_t)

Usage:

function(procedure) : procedure -> function function : type type

Parameters:

Description:

Example 1:

   > procedure EXP(X,n,p) {
       var res, oldPrec;
       oldPrec = prec;
       prec = p!;
       
       res = exp(X);
       
       prec = oldPrec!;
       return res;
     };
   > f = function(EXP);
   > f(1);
   2.71828182845904523536028747135266249775724709369998
   > exp(1);
   2.71828182845904523536028747135266249775724709369998
   > f(x + 3);
   (function(proc(X, n, p)
   {
   var res, oldPrec;
   oldPrec = prec;
   prec = p!;
   res = exp(X);
   prec = oldPrec!;
   return res;
   }))(3 + x)
   > diff(f);
   diff(function(proc(X, n, p)
   {
   var res, oldPrec;
   oldPrec = prec;
   prec = p!;
   res = exp(X);
   prec = oldPrec!;
   return res;
   }))
   > (diff(f))(0);
   1
   > g = f(sin(x));
   > g(17);
   0.382358169993866834026905546416556413595734583420876
   > diff(g);
   (diff(function(proc(X, n, p)
   {
   var res, oldPrec;
   oldPrec = prec;
   prec = p!;
   res = exp(X);
   prec = oldPrec!;
   return res;
   })))(sin(x)) * cos(x)
   > (diff(g))(1);
   1.25338076749344683697237458088447611474812675164344
   > p = remez(f,3,[-1/2;1/2]);
   > p;
   0.99967120901420646830315493949039176881764871951832 + x * (0.99973702983571140134762682913614052309208076875596 + x * (0.510497293602826249216227216546435103583073053437 + x * 0.169814324607133287588897694747370380479108785868016))
See also: proc, library, procedure, externalproc, boolean, constant, integer, list of, range, string, object
Go back to the list of commands

Name:

>= greater-than-or-equal-to operator

Library name:

sollya_obj_t sollya_lib_cmp_greater_equal(sollya_obj_t, sollya_obj_t)

Usage:

expr1 >= expr2 : (constant, constant) -> boolean

Parameters:

Description:

Example 1:

   > 5 >= 4;
   true
   > 5 >= 5;
   true
   > 5 >= 6;
   false
   > exp(2) >= exp(1);
   true
   > log(1) >= exp(2);
   false

Example 2:

   > prec = 12;
   The precision has been set to 12 bits.
   > 16384.1 >= 16385.1;
   true
See also: ==, !=, >, <=, <, in, !, &&, ||, prec, max, min
Go back to the list of commands

Name:

getsuppressedmessages returns a list of numbers of messages that have been suppressed from message output

Library name:

sollya_obj_t sollya_lib_getsuppressedmessages();

Usage:

getsuppressedmessages() : void -> list

Description:

Example 1:

   > verbosity = 1;
   The verbosity level has been set to 1.
   > 0.1;
   Warning: Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   0.1
   > suppressmessage(174);
   > 0.1;
   0.1
   > suppressmessage(407);
   > 0.1;
   0.1
   > getsuppressedmessages();
   [|174, 407|]
   > suppressmessage(207, 196);
   > getsuppressedmessages();
   [|174, 196, 207, 407|]

Example 2:

   > suppressmessage(174, 209, 13, 24, 196);
   > suppressmessage([| 16, 17 |]);
   > suppressmessage(19);
   > unsuppressmessage([| 13, 17 |]);
   > getsuppressedmessages();
   [|16, 19, 24, 174, 196, 209|]
   > unsuppressmessage(getsuppressedmessages());
   > getsuppressedmessages();
   [| |]

Example 3:

   > verbosity = 12;
   The verbosity level has been set to 12.
   > suppressmessage(174);
   > exp(x * 0.1);
   Information: no Horner simplification will be performed because the given tree is already in Horner form.
   exp(x * 0.1)
   > getsuppressedmessages();
   [|174|]
   > verbosity = 0;
   The verbosity level has been set to 0.
   > exp(x * 0.1);
   exp(x * 0.1)
   > getsuppressedmessages();
   [|174|]
See also: getsuppressedmessages, suppressmessage, unsuppressmessage, verbosity, roundingwarnings
Go back to the list of commands

Name:

> greater-than operator

Library name:

sollya_obj_t sollya_lib_cmp_greater(sollya_obj_t, sollya_obj_t)

Usage:

expr1 > expr2 : (constant, constant) -> boolean

Parameters:

Description:

Example 1:

   > 5 > 4;
   true
   > 5 > 5;
   false
   > 5 > 6;
   false
   > exp(2) > exp(1);
   true
   > log(1) > exp(2);
   false

Example 2:

   > prec = 12;
   The precision has been set to 12 bits.
   > 16385.1 > 16384.1;
   false
See also: ==, !=, >=, <=, <, in, !, &&, ||, prec, max, min
Go back to the list of commands

Name:

guessdegree returns the minimal degree needed for a polynomial to approximate a function with a certain error on an interval.

Library names:

sollya_obj_t sollya_lib_guessdegree(sollya_obj_t, sollya_obj_t,                                     sollya_obj_t, ...) sollya_obj_t sollya_lib_v_guessdegree(sollya_obj_t, sollya_obj_t,                                       sollya_obj_t, va_list)

Usage:

guessdegree(f,I,eps,w,bound) : (function, range, constant, function, constant) -> range

Parameters:

Description:

Example 1:

   > guessdegree(exp(x),[-1;1],1e-10);
   [10;10]

Example 2:

   > guessdegree(exp(x),[-1;1],1e-10,default, 9);
   [10;@Inf@]

Example 3:

   > guessdegree(1, [-1;1], 1e-8, 1/exp(x));
   [8;9]
See also: dirtyinfnorm, remez, fpminimax, degree
Go back to the list of commands

Names:

halfprecision, HP rounding to the nearest IEEE 754 half-precision number (binary16).

Library names:

sollya_obj_t sollya_lib_halfprecision(sollya_obj_t) sollya_obj_t sollya_lib_halfprecision_obj() int sollya_lib_is_halfprecision_obj(sollya_obj_t) sollya_obj_t sollya_lib_build_function_halfprecision(sollya_obj_t) #define SOLLYA_HP(x) sollya_lib_build_function_halfprecision(x)

Description:

Example 1:

   > display=binary!;
   > HP(0.1);
   1.100110011_2 * 2^(-4)
   > HP(4.17);
   1.00001011_2 * 2^(2)
   > HP(1.011_2 * 2^(-23));
   1.1_2 * 2^(-23)
See also: single, double, doubleextended, doubledouble, quad, tripledouble, roundcoefficients, fpminimax, implementpoly, round, printsingle
Go back to the list of commands

Name:

hexadecimal special value for global state display

Library names:

sollya_obj_t sollya_lib_hexadecimal() int sollya_lib_is_hexadecimal(sollya_obj_t)

Description:

See also: decimal, dyadic, powers, binary, display
Go back to the list of commands

Name:

honorcoeffprec indicates the (forced) honoring the precision of the coefficients in implementpoly

Library names:

sollya_obj_t sollya_lib_honorcoeffprec() int sollya_lib_is_honorcoeffprec(sollya_obj_t)

Usage:

honorcoeffprec : honorcoeffprec

Description:

Example 1:

   > 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)
See also: implementpoly, printexpansion, fpminimax
Go back to the list of commands

Name:

hopitalrecursions controls the number of recursion steps when applying L'Hopital's rule.

Library names:

void sollya_lib_set_hopitalrecursions_and_print(sollya_obj_t) void sollya_lib_set_hopitalrecursions(sollya_obj_t) sollya_obj_t sollya_lib_get_hopitalrecursions()

Usage:

hopitalrecursions = n : integer -> void hopitalrecursions = n ! : integer -> void hopitalrecursions : integer

Parameters:

Description:

Example 1:

   > hopitalrecursions=0;
   The number of recursions for Hopital's rule has been set to 0.
   > evaluate(log(1+x)^2/x^2,[-1/2; 1]);
   [-@Inf@;@Inf@]
   > hopitalrecursions=1;
   The number of recursions for Hopital's rule has been set to 1.
   > evaluate(log(1+x)^2/x^2,[-1/2; 1]);
   [-2.52258872223978123766892848583270627230200053744108;6.7725887222397812376689284858327062723020005374411]
See also: taylorrecursions, infnorm, findzeros, evaluate
Go back to the list of commands

Name:

horner brings all polynomial subexpressions of an expression to Horner form

Library name:

sollya_obj_t sollya_lib_horner(sollya_obj_t)

Usage:

horner(function) : function -> function

Parameters:

Description:

Example 1:

   > print(horner(1 + 2 * x + 3 * x^2));
   1 + x * (2 + x * 3)
   > print(horner((x + 1)^7));
   1 + x * (7 + x * (21 + x * (35 + x * (35 + x * (21 + x * (7 + x))))))

Example 2:

   > print(horner(exp((x + 1)^5) - log(asin(x + x^3) + x)));
   exp(1 + x * (5 + x * (10 + x * (10 + x * (5 + x))))) - log(asin(x * (1 + x^2)) + x)
See also: canonical, print, coeff, degree, autosimplify, simplify
Go back to the list of commands

Name:

HP short form for halfprecision
See also: halfprecision
Go back to the list of commands

Name:

implementconstant implements a constant in arbitrary precision

Library names:

void sollya_lib_implementconstant(sollya_obj_t, ...); void sollya_lib_v_implementconstant(sollya_obj_t, va_list);

Usage:

implementconstant(expr) : constant -> void implementconstant(expr,filename) : (constant, string) -> void implementconstant(expr,filename,functionname) : (constant, string, string) -> void

Description:

Example 1:

   > implementconstant(exp(1)+log(2)/sqrt(1/10));
   /*
       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.
       
   */
   
   
   #include <mpfr.h>
   
   void
   const_something (mpfr_ptr y, mp_prec_t prec)
   {
     /* Declarations */
     mpfr_t tmp1;
     mpfr_t tmp2;
     mpfr_t tmp3;
     mpfr_t tmp4;
     mpfr_t tmp5;
     mpfr_t tmp6;
     mpfr_t tmp7;
   
     /* Initializations */
     mpfr_init2 (tmp2, prec+5);
     mpfr_init2 (tmp1, prec+3);
     mpfr_init2 (tmp4, prec+8);
     mpfr_init2 (tmp3, prec+7);
     mpfr_init2 (tmp6, prec+11);
     mpfr_init2 (tmp7, prec+11);
     mpfr_init2 (tmp5, prec+11);
   
     /* Core */
     mpfr_set_prec (tmp2, prec+4);
     mpfr_set_ui (tmp2, 1, MPFR_RNDN);
     mpfr_set_prec (tmp1, prec+3);
     mpfr_exp (tmp1, tmp2, MPFR_RNDN);
     mpfr_set_prec (tmp4, prec+8);
     mpfr_set_ui (tmp4, 2, MPFR_RNDN);
     mpfr_set_prec (tmp3, prec+7);
     mpfr_log (tmp3, tmp4, MPFR_RNDN);
     mpfr_set_prec (tmp6, prec+11);
     mpfr_set_ui (tmp6, 1, MPFR_RNDN);
     mpfr_set_prec (tmp7, prec+11);
     mpfr_set_ui (tmp7, 10, MPFR_RNDN);
     mpfr_set_prec (tmp5, prec+11);
     mpfr_div (tmp5, tmp6, tmp7, MPFR_RNDN);
     mpfr_set_prec (tmp4, prec+7);
     mpfr_sqrt (tmp4, tmp5, MPFR_RNDN);
     mpfr_set_prec (tmp2, prec+5);
     mpfr_div (tmp2, tmp3, tmp4, MPFR_RNDN);
     mpfr_set_prec (y, prec+3);
     mpfr_add (y, tmp1, tmp2, MPFR_RNDN);
   
     /* Cleaning stuff */
     mpfr_clear(tmp1);
     mpfr_clear(tmp2);
     mpfr_clear(tmp3);
     mpfr_clear(tmp4);
     mpfr_clear(tmp5);
     mpfr_clear(tmp6);
     mpfr_clear(tmp7);
   }

Example 2:

   > implementconstant(sin(13/17),"sine_of_thirteen_seventeenth.c");
   > readfile("sine_of_thirteen_seventeenth.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.
       
   */
   
   
   #include <mpfr.h>
   
   void
   const_something (mpfr_ptr y, mp_prec_t prec)
   {
     /* Declarations */
     mpfr_t tmp1;
     mpfr_t tmp2;
     mpfr_t tmp3;
   
     /* Initializations */
     mpfr_init2 (tmp2, prec+6);
     mpfr_init2 (tmp3, prec+6);
     mpfr_init2 (tmp1, prec+6);
   
     /* Core */
     mpfr_set_prec (tmp2, prec+6);
     mpfr_set_ui (tmp2, 13, MPFR_RNDN);
     mpfr_set_prec (tmp3, prec+6);
     mpfr_set_ui (tmp3, 17, MPFR_RNDN);
     mpfr_set_prec (tmp1, prec+6);
     mpfr_div (tmp1, tmp2, tmp3, MPFR_RNDN);
     mpfr_set_prec (y, prec+2);
     mpfr_sin (y, tmp1, MPFR_RNDN);
   
     /* Cleaning stuff */
     mpfr_clear(tmp1);
     mpfr_clear(tmp2);
     mpfr_clear(tmp3);
   }
   

Example 3:

   > implementconstant(asin(1/3 * pi),default,"arcsin_of_one_third_pi");
   /*
       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.
       
   */
   
   
   #include <mpfr.h>
   
   void
   arcsin_of_one_third_pi (mpfr_ptr y, mp_prec_t prec)
   {
     /* Declarations */
     mpfr_t tmp1;
     mpfr_t tmp2;
     mpfr_t tmp3;
   
     /* Initializations */
     mpfr_init2 (tmp2, prec+8);
     mpfr_init2 (tmp3, prec+8);
     mpfr_init2 (tmp1, prec+8);
   
     /* Core */
     mpfr_set_prec (tmp2, prec+8);
     mpfr_const_pi (tmp2, MPFR_RNDN);
     mpfr_set_prec (tmp3, prec+8);
     mpfr_set_ui (tmp3, 3, MPFR_RNDN);
     mpfr_set_prec (tmp1, prec+8);
     mpfr_div (tmp1, tmp2, tmp3, MPFR_RNDN);
     mpfr_set_prec (y, prec+2);
     mpfr_asin (y, tmp1, MPFR_RNDN);
   
     /* Cleaning stuff */
     mpfr_clear(tmp1);
     mpfr_clear(tmp2);
     mpfr_clear(tmp3);
   }

Example 4:

   > implementconstant(ceil(log(19 + 1/3)),"constant_code.c","magic_constant");
   > readfile("constant_code.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.
       
   */
   
   
   #include <mpfr.h>
   
   void
   magic_constant (mpfr_ptr y, mp_prec_t prec)
   {
     /* Initializations */
   
     /* Core */
     mpfr_set_prec (y, prec);
     mpfr_set_ui (y, 3, MPFR_RNDN);
   }
   

Example 5:

   > bashexecute("gcc -fPIC -Wall -c libraryconstantexample.c -I$HOME/.local/include");
   > bashexecute("gcc -shared -o libraryconstantexample libraryconstantexample.o -lgmp -lmpfr");
   > euler_gamma = libraryconstant("./libraryconstantexample");
   > implementconstant(euler_gamma^(1/3));
   /*
       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.
       
   */
   
   
   #include <mpfr.h>
   
   void
   const_something (mpfr_ptr y, mp_prec_t prec)
   {
     /* Declarations */
     mpfr_t tmp1;
   
     /* Initializations */
     mpfr_init2 (tmp1, prec+1);
   
     /* Core */
     euler_gamma (tmp1, prec+1);
     mpfr_set_prec (y, prec+2);
     mpfr_root (y, tmp1, 3, MPFR_RNDN);
   
     /* Cleaning stuff */
     mpfr_clear(tmp1);
   }
See also: implementpoly, libraryconstant, library, function
Go back to the list of commands

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

Name:

inf gives the lower bound of an interval.

Library name:

sollya_obj_t sollya_lib_inf(sollya_obj_t)

Usage:

inf(I) : range -> constant inf(x) : constant -> constant

Parameters:

Description:

Example 1:

   > inf([1;3]);
   1
   > inf(0);
   0

Example 2:

   > display=binary!;
   > I=[0.111110000011111_2; 1];
   > inf(I);
   1.11110000011111_2 * 2^(-1)
   > prec=12!;
   > inf(I);
   1.11110000011111_2 * 2^(-1)
See also: mid, sup, max, min
Go back to the list of commands

Name:

infnorm computes an interval bounding the infinity norm of a function on an interval.

Library names:

sollya_obj_t sollya_lib_infnorm(sollya_obj_t, sollya_obj_t, ...) sollya_obj_t sollya_lib_v_infnorm(sollya_obj_t, sollya_obj_t, va_list)

Usage:

infnorm(f,I,filename,Ilist) : (function, range, string, list) -> range

Parameters:

Description:

Example 1:

   > infnorm(exp(x),[-2;3]);
   [2.00855369231876677409285296545817178969879078385537e1;2.00855369231876677409285296545817178969879078385544e1]

Example 2:

   > infnorm(exp(x),[-2;3],"proof.txt");
   [2.00855369231876677409285296545817178969879078385537e1;2.00855369231876677409285296545817178969879078385544e1]

Example 3:

   > infnorm(exp(x),[-2;3],[| [0;1], [2;2.5] |]);
   [2.00855369231876677409285296545817178969879078385537e1;2.00855369231876677409285296545817178969879078385544e1]

Example 4:

   > infnorm(exp(x),[-2;3],"proof.txt", [| [0;1], [2;2.5] |]);
   [2.00855369231876677409285296545817178969879078385537e1;2.00855369231876677409285296545817178969879078385544e1]

Example 5:

   > infnorm(exp(x),[1;1]);
   [2.71828182845904523536028747135266249775724709369989;2.71828182845904523536028747135266249775724709369998]

Example 6:

   > infnorm(exp(x), [log(0);log(1)]);
   [0;@Inf@]
See also: prec, diam, hopitalrecursions, taylorrecursions, dirtyinfnorm, checkinfnorm, supnorm, findzeros, diff, taylorrecursions, autodiff, numberroots, taylorform
Go back to the list of commands

Name:

in containment test operator

Library name:

sollya_obj_t sollya_lib_cmp_in(sollya_obj_t, sollya_obj_t)

Usage:

expr in range1 : (constant, range) -> boolean range1 in range2 : (range, range) -> boolean

Parameters:

Description:

Example 1:

   > 5 in [-4;7];
   true
   > 4 in [-1;1];
   false
   > 0 in sin([-17;17]);
   true

Example 2:

   > [5;7] in [2;8];
   true
   > [2;3] in [4;5];
   false
   > [2;3] in [2.5;5];
   false

Example 3:

   > for i in [|1,...,5|] do print(i);
   1
   2
   3
   4
   5
See also: ==, !=, >=, >, <=, <, !, &&, ||, prec, print
Go back to the list of commands

Name:

integer keyword representing a machine integer type

Usage:

integer : type type

Description:

See also: externalproc, boolean, constant, function, list of, range, string, object
Go back to the list of commands

Name:

integral computes an interval bounding the integral of a function on an interval.

Library name:

sollya_obj_t sollya_lib_integral(sollya_obj_t, sollya_obj_t)

Usage:

integral(f,I) : (function, range) -> range

Parameters:

Description:

Example 1:

   > sin(10);
   -0.54402111088936981340474766185137728168364301291621
   > integral(cos(x),[0;10]);
   [-0.54710197983579690224097637163525943075698599257332;-0.54094015130013183848150540881373370744053741191728]
   > diam=1e-5!;
   > integral(cos(x),[0;10]);
   [-0.54432915685955427101857780295936956775293876382777;-0.54371306401249969508039644221927489010425803173555]
See also: diam, dirtyintegral, prec
Go back to the list of commands

Name:

isbound indicates whether a variable is bound or not.

Usage:

isbound(ident) : boolean

Parameters:

Description:

Example 1:

   > isbound(x);
   false
   > isbound(f);
   false
   > isbound(g);
   false
   > f=sin(x);
   > isbound(x);
   true
   > isbound(f);
   true
   > isbound(g);
   false

Example 2:

   > isbound(a);
   false
   > { var a; isbound(a); };
   true
   > isbound(a);
   false

Example 3:

   > f=sin(x);
   > isbound(x);
   true
   > rename(x,y);
   > isbound(x);
   false

Example 4:

   > x=1;
   > f=sin(y);
   > rename(y,x);
   > f;
   sin(x)
   > x;
   x
   > isbound(x);
   true
   > rename(x,y);
   > isbound(x);
   true
   > x;
   1
See also: rename
Go back to the list of commands

Name:

isevaluable tests whether a function can be evaluated at a point

Usage:

isevaluable(function, constant) : (function, constant) -> boolean

Parameters:

Description:

Example 1:

   > isevaluable(sin(pi * 1/x), 0.75);
   true
   > print(evaluate(sin(pi * 1/x), 0.75));
   -0.86602540378443864676372317075293618347140262690518

Example 2:

   > isevaluable(sin(pi * 1/x), 0.5);
   true
   > print(evaluate(sin(pi * 1/x), 0.5));
   [-1.72986452514381269516508615031098129542836767991679e-12715;7.5941198201187963145069564314525661706039084390067e-12716]

Example 3:

   > isevaluable(sin(pi * 1/x), 0);
   true
   > print(evaluate(sin(pi * 1/x), 0));
   [-1;1]

Example 4:

   > procedure isEvaluableEmulation(f, c) {
       return match evaluate(f, c) with
               NaN : (false)
            [NaN;NaN] : (false)
            default : (true);
     };
   > isEvaluableEmulation(sin(pi * 1/x), 0.75);
   true
   > isEvaluableEmulation(sin(pi * 1/x), 0.5);
   true
   > isEvaluableEmulation(sin(pi * 1/x), 0);
   true
See also: evaluate
Go back to the list of commands

Name:

<= less-than-or-equal-to operator

Library name:

sollya_obj_t sollya_lib_cmp_less_equal(sollya_obj_t, sollya_obj_t)

Usage:

expr1 <= expr2 : (constant, constant) -> boolean

Parameters:

Description:

Example 1:

   > 5 <= 4;
   false
   > 5 <= 5;
   true
   > 5 <= 6;
   true
   > exp(2) <= exp(1);
   false
   > log(1) <= exp(2);
   true

Example 2:

   > prec = 12;
   The precision has been set to 12 bits.
   > 16385.1 <= 16384.1;
   true
See also: ==, !=, >=, >, <, in, !, &&, ||, prec, max, min
Go back to the list of commands

Name:

length computes the length of a list or string.

Library name:

sollya_obj_t sollya_lib_length(sollya_obj_t)

Usage:

length(L) : list -> integer length(s) : string -> integer

Parameters:

Description:

Example 1:

   > length("Hello World!");
   12

Example 2:

   > length([|1,...,5|]);
   5

Example 3:

   > length([| |]);
   0

Example 4:

   > length([|1,2...|]);
   @Inf@
Go back to the list of commands

Name:

libraryconstant binds an external mathematical constant to a variable in Sollya

Library names:

sollya_obj_t sollya_lib_libraryconstant(char *, void (*)(mpfr_t, mp_prec_t)) sollya_obj_t sollya_lib_build_function_libraryconstant(char *,                                                        void (*)(mpfr_t,                                                                 mp_prec_t))

Usage:

libraryconstant(path) : string -> function

Description:

Example 1:

   > bashexecute("gcc -fPIC -Wall -c libraryconstantexample.c -I$HOME/.local/include");
   > bashexecute("gcc -shared -o libraryconstantexample libraryconstantexample.o -lgmp -lmpfr");
   > euler_gamma = libraryconstant("./libraryconstantexample");
   > prec = 20!;
   > euler_gamma;
   0.577215
   > prec = 100!;
   > euler_gamma;
   0.577215664901532860606512090082
   > midpointmode = on;
   Midpoint mode has been activated.
   > [euler_gamma];
   0.57721566490153286060651209008~2/4~
See also: bashexecute, externalproc, externalplot, pi, library, evaluate
Go back to the list of commands

Name:

library binds an external mathematical function to a variable in Sollya

Library names:

sollya_obj_t sollya_lib_libraryfunction(sollya_obj_t, char *,                                         int (*)(mpfi_t, mpfi_t, int)) sollya_obj_t sollya_lib_build_function_libraryfunction(sollya_obj_t, char *,                                                        int (*)(mpfi_t,                                                                mpfi_t, int))

Usage:

library(path) : string -> function

Description:

Example 1:

   > bashexecute("gcc -fPIC -Wall -c libraryexample.c -I$HOME/.local/include");
   > bashexecute("gcc -shared -o libraryexample libraryexample.o -lgmp -lmpfr");
   > myownlog = library("./libraryexample");
   > evaluate(log(x), 2);
   0.69314718055994530941723212145817656807550013436024
   > evaluate(myownlog(x), 2);
   0.69314718055994530941723212145817656807550013436024
See also: function, bashexecute, externalproc, externalplot, diff, evaluate, libraryconstant
Go back to the list of commands

Name:

list of keyword used in combination with a type keyword

Description:

See also: externalproc, boolean, constant, function, integer, range, string, object
Go back to the list of commands

Name:

log10 decimal logarithm.

Library names:

sollya_obj_t sollya_lib_log10(sollya_obj_t) sollya_obj_t sollya_lib_build_function_log10(sollya_obj_t) #define SOLLYA_LOG10(x) sollya_lib_build_function_log10(x)

Description:

See also: log, log2
Go back to the list of commands

Name:

log1p translated logarithm.

Library names:

sollya_obj_t sollya_lib_log1p(sollya_obj_t) sollya_obj_t sollya_lib_build_function_log1p(sollya_obj_t) #define SOLLYA_LOG1P(x) sollya_lib_build_function_log1p(x)

Description:

See also: log
Go back to the list of commands

Name:

log2 binary logarithm.

Library names:

sollya_obj_t sollya_lib_log2(sollya_obj_t) sollya_obj_t sollya_lib_build_function_log2(sollya_obj_t) #define SOLLYA_LOG2(x) sollya_lib_build_function_log2(x)

Description:

See also: log, log10
Go back to the list of commands

Name:

log natural logarithm.

Library names:

sollya_obj_t sollya_lib_log(sollya_obj_t) sollya_obj_t sollya_lib_build_function_log(sollya_obj_t) #define SOLLYA_LOG(x) sollya_lib_build_function_log(x)

Description:

See also: exp, log2, log10
Go back to the list of commands

Name:

< less-than operator

Library name:

sollya_obj_t sollya_lib_cmp_less(sollya_obj_t, sollya_obj_t)

Usage:

expr1 < expr2 : (constant, constant) -> boolean

Parameters:

Description:

Example 1:

   > 5 < 4;
   false
   > 5 < 5;
   false
   > 5 < 6;
   true
   > exp(2) < exp(1);
   false
   > log(1) < exp(2);
   true

Example 2:

   > prec = 12;
   The precision has been set to 12 bits.
   > 16384.1 < 16385.1;
   false
See also: ==, !=, >=, >, <=, in, !, &&, ||, prec, max, min
Go back to the list of commands

Name:

mantissa returns the integer mantissa of a number.

Library name:

sollya_obj_t sollya_lib_mantissa(sollya_obj_t)

Usage:

mantissa(x) : constant -> integer

Parameters:

Description:

Example 1:

   > a=round(Pi,20,RN);
   > e=exponent(a);
   > m=mantissa(a);
   > m;
   411775
   > a-m*2^e;
   0
See also: exponent, precision
Go back to the list of commands

Name:

max determines which of given constant expressions has maximum value

Library names:

sollya_obj_t sollya_lib_max(sollya_obj_t, ...) sollya_obj_t sollya_lib_v_max(sollya_obj_t, va_list)

Usage:

max(expr1,expr2,...,exprn) : (constant, constant, ..., constant) -> constant max(l) : list -> constant

Parameters:

Description:

Example 1:

   > max(1,2,3,exp(5),log(0.25));
   1.48413159102576603421115580040552279623487667593878e2
   > max(17);
   17

Example 2:

   > l = [|1,2,3,exp(5),log(0.25)|];
   > max(l);
   1.48413159102576603421115580040552279623487667593878e2

Example 3:

   > print(max(exp(17),sin(62)));
   exp(17)

Example 4:

   > verbosity = 1!;
   > print(max(17 + log2(13)/log2(9),17 + log(13)/log(9)));
   Warning: the tool is unable to decide a maximum computation by evaluation even though faithful evaluation of the terms has been possible. The terms will be considered to be equal.
   17 + log2(13) / log2(9)
See also: min, ==, !=, >=, >, <, <=, in, inf, sup
Go back to the list of commands

Name:

mid gives the middle of an interval.

Library name:

sollya_obj_t sollya_lib_mid(sollya_obj_t)

Usage:

mid(I) : range -> constant mid(x) : constant -> constant

Parameters:

Description:

Example 1:

   > mid([1;3]);
   2
   > mid(17);
   17
See also: inf, sup
Go back to the list of commands

Name:

midpointmode global variable controlling the way intervals are displayed.

Library names:

void sollya_lib_set_midpointmode_and_print(sollya_obj_t) void sollya_lib_set_midpointmode(sollya_obj_t) sollya_obj_t sollya_lib_get_midpointmode()

Usage:

midpointmode = activation value : on|off -> void midpointmode = activation value ! : on|off -> void midpointmode : on|off

Parameters:

Description:

Example 1:

   > a = round(Pi,30,RD);
   > b = round(Pi,30,RU);
   > d = [a,b];
   > d;
   [3.1415926516056060791015625;3.1415926553308963775634765625]
   > midpointmode=on!;
   > d;
   0.314159265~1/6~e1
See also: on, off, roundingwarnings, display, decimal
Go back to the list of commands

Name:

min determines which of given constant expressions has minimum value

Library names:

sollya_obj_t sollya_lib_min(sollya_obj_t, ...) sollya_obj_t sollya_lib_v_min(sollya_obj_t, va_list)

Usage:

min(expr1,expr2,...,exprn) : (constant, constant, ..., constant) -> constant min(l) : list -> constant

Parameters:

Description:

Example 1:

   > min(1,2,3,exp(5),log(0.25));
   -1.3862943611198906188344642429163531361510002687205
   > min(17);
   17

Example 2:

   > l = [|1,2,3,exp(5),log(0.25)|];
   > min(l);
   -1.3862943611198906188344642429163531361510002687205

Example 3:

   > print(min(exp(17),sin(62)));
   sin(62)

Example 4:

   > verbosity = 1!;
   > print(min(17 + log2(13)/log2(9),17 + log(13)/log(9)));
   Warning: the tool is unable to decide a minimum computation by evaluation even though faithful evaluation of the terms has been possible. The terms will be considered to be equal.
   17 + log(13) / log(9)
See also: max, ==, !=, >=, >, <, <=, in, inf, sup
Go back to the list of commands

Name:

- subtraction function

Library names:

sollya_obj_t sollya_lib_sub(sollya_obj_t, sollya_obj_t) sollya_obj_t sollya_lib_build_function_sub(sollya_obj_t, sollya_obj_t) #define SOLLYA_SUB(x,y) sollya_lib_build_function_sub((x), (y)) sollya_obj_t sollya_lib_neg(sollya_obj_t) sollya_obj_t sollya_lib_build_function_neg(sollya_obj_t) #define SOLLYA_NEG(x) sollya_lib_build_function_neg(x)

Usage:

function1 - function2 : (function, function) -> function interval1 - interval2 : (range, range) -> range interval1 - constant : (range, constant) -> range interval1 - constant : (constant, range) -> range - function1 : function -> function - interval1 : range -> range

Parameters:

Description:

Example 1:

   > 5 - 2;
   3

Example 2:

   > x - 2;
   -2 + x

Example 3:

   > x - x;
   0

Example 4:

   > diff(sin(x) - exp(x));
   cos(x) - exp(x)

Example 5:

   > [1;2] - [3;4];
   [-3;-1]
   > [1;2] - 17;
   [-16;-15]
   > 13 - [-4;17];
   [-4;17]

Example 6:

   > -exp(x);
   -exp(x)
   > -13;
   -13
   > -[13;17];
   [-17;-13]
See also: +, *, /, ^
Go back to the list of commands

Name:

* multiplication function

Library names:

sollya_obj_t sollya_lib_mul(sollya_obj_t, sollya_obj_t) sollya_obj_t sollya_lib_build_function_mul(sollya_obj_t, sollya_obj_t) #define SOLLYA_MUL(x,y) sollya_lib_build_function_mul((x), (y))

Usage:

function1 * function2 : (function, function) -> function interval1 * interval2 : (range, range) -> range interval1 * constant : (range, constant) -> range interval1 * constant : (constant, range) -> range

Parameters:

Description:

Example 1:

   > 5 * 2;
   10

Example 2:

   > x * 2;
   x * 2

Example 3:

   > x * x;
   x^2

Example 4:

   > diff(sin(x) * exp(x));
   sin(x) * exp(x) + exp(x) * cos(x)

Example 5:

   > [1;2] * [3;4];
   [3;8]
   > [1;2] * 17;
   [17;34]
   > 13 * [-4;17];
   [-52;221]
See also: +, -, /, ^
Go back to the list of commands

Name:

nearestint the function mapping the reals to the integers nearest to them.

Library names:

sollya_obj_t sollya_lib_nearestint(sollya_obj_t) sollya_obj_t sollya_lib_build_function_nearestint(sollya_obj_t) #define SOLLYA_NEARESTINT(x) sollya_lib_build_function_nearestint(x)

Description:

See also: ceil, floor, round, RN
Go back to the list of commands

Name:

!= negated equality test operator

Library name:

sollya_obj_t sollya_lib_cmp_not_equal(sollya_obj_t, sollya_obj_t)

Usage:

expr1 != expr2 : (any type, any type) -> boolean

Parameters:

Description:

Example 1:

   > "Hello" != "Hello";
   false
   > "Hello" != "Salut";
   true
   > "Hello" != 5;
   true
   > 5 + x != 5 + x;
   false

Example 2:

   > 1 != exp(0);
   false
   > asin(1) * 2 != pi;
   false
   > exp(5) != log(4);
   true

Example 3:

   > sin(pi/6) != 1/2 * sqrt(3);
   true

Example 4:

   > prec = 12;
   The precision has been set to 12 bits.
   > 16384.1 != 16385.1;
   false

Example 5:

   > error != error;
   false
See also: ==, >, >=, <=, <, in, !, &&, ||, error, prec
Go back to the list of commands

Name:

nop no operation

Usage:

nop : void -> void nop() : void -> void nop(n) : integer -> void

Description:

Example 1:

   > nop;

Example 2:

   > nop(100);

Example 3:

   > succ = proc(n) { return n + 1; };
   > succ;
   proc(n)
   {
   nop;
   return (n) + (1);
   }
   > succ(5);
   6
See also: proc, time
Go back to the list of commands

Name:

! boolean NOT operator

Library name:

sollya_obj_t sollya_lib_negate(sollya_obj_t)

Usage:

! expr : boolean -> boolean

Parameters:

Description:

Example 1:

   > ! false;
   true

Example 2:

   > ! (1 == exp(0));
   false
See also: &&, ||
Go back to the list of commands

Name:

numberroots Computes the number of roots of a polynomial in a given range.

Library name:

sollya_obj_t sollya_lib_numberroots(sollya_obj_t, sollya_obj_t)

Usage:

numberroots(p, I) : (function, range) -> integer

Parameters:

Description:

Example 1:

   > numberroots(1+x-x^2, [1,2]);
   1
   > findzeros(1+x-x^2, [1,2]);
   [|[1.617919921875;1.6180419921875]|]

Example 2:

   > numberroots((1+x)*(1-x), [-1,1]);
   2
   > numberroots(x^2, [-1,1]);
   1

Example 3:

   > verbosity = 1!;
   > numberroots(x-pi, [0,4]);
   Warning: the 0th coefficient of the polynomial is neither a floating point
   constant nor can be evaluated without rounding to a floating point constant.
   Will faithfully evaluate it with the current precision (165 bits)
   1

Example 4:

   > verbosity = 1!;
   > numberroots(1+x-x^2, [0, @Inf@]);
   Warning: the given interval must have finite bounds.
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
   error
   > numberroots(exp(x), [0, 1]);
   Warning: the given function must be a polynomial in this context.
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
   error
See also: dirtyfindzeros, findzeros
Go back to the list of commands

Name:

numerator gives the numerator of an expression

Library name:

sollya_obj_t sollya_lib_numerator(sollya_obj_t)

Usage:

numerator(expr) : function -> function

Parameters:

Description:

Example 1:

   > numerator(5/3);
   5

Example 2:

   > numerator(exp(x));
   exp(x)

Example 3:

   > a = 5/3;
   > b = numerator(a)/denominator(a);
   > print(a);
   5 / 3
   > print(b);
   5 / 3

Example 4:

   > a = exp(x/3);
   > b = numerator(a)/denominator(a);
   > print(a);
   exp(x / 3)
   > print(b);
   exp(x / 3)
See also: denominator, rationalmode
Go back to the list of commands

Name:

object keyword representing a Sollya object type

Usage:

object : type type

Description:

See also: externalproc, boolean, constant, function, list of, range, string, integer
Go back to the list of commands

Name:

off special value for certain global variables.

Library names:

sollya_obj_t sollya_lib_off() int sollya_lib_is_off(sollya_obj_t)

Description:

Example 1:

   > canonical=on;
   Canonical automatic printing output has been activated.
   > p=1+x+x^2;
   > mode=off;
   > p;
   1 + x + x^2
   > canonical=mode;
   Canonical automatic printing output has been deactivated.
   > p;
   1 + x * (1 + x)
See also: on, autosimplify, canonical, timing, fullparentheses, midpointmode, rationalmode, roundingwarnings, timing, dieonerrormode
Go back to the list of commands

Name:

on special value for certain global variables.

Library names:

sollya_obj_t sollya_lib_on() int sollya_lib_is_on(sollya_obj_t)

Description:

Example 1:

   > p=1+x+x^2;
   > mode=on;
   > p;
   1 + x * (1 + x)
   > canonical=mode;
   Canonical automatic printing output has been activated.
   > p;
   1 + x + x^2
See also: off, autosimplify, canonical, timing, fullparentheses, midpointmode, rationalmode, roundingwarnings, timing, dieonerrormode
Go back to the list of commands

Name:

|| boolean OR operator

Library name:

sollya_obj_t sollya_lib_or(sollya_obj_t, sollya_obj_t)

Usage:

expr1 || expr2 : (boolean, boolean) -> boolean

Parameters:

Description:

Example 1:

   > false || false;
   false

Example 2:

   > (1 == exp(0)) || (0 == log(1));
   true
See also: &&, !
Go back to the list of commands

Name:

parse parses an expression contained in a string

Library name:

sollya_obj_t sollya_lib_parse(sollya_obj_t)

Usage:

parse(string) : string -> function | error

Parameters:

Description:

Example 1:

   > parse("exp(x)");
   exp(x)

Example 2:

   > text = "remez(exp(x),5,[-1;1])";
   > print("The string", text, "gives", parse(text));
   The string remez(exp(x),5,[-1;1]) gives 8.7381909882756203676868315731687604903964388498642e-3 * x^5 + 4.3793696379596015478233171265365272893795005588381e-2 * x^4 + 0.16642465614952768185129433844012193925654065755905 * x^3 + 0.49919698262963614991826575452094101562044819693772 * x^2 + 1.00003834650599815466340068058231011540878088492516 * x + 1.00004475029559502606203712816558243384077522932213

Example 3:

   > verbosity = 1!;
   > parse("5 + * 3");
   Warning: syntax error, unexpected *. Will try to continue parsing (expecting ";"). May leak memory.
   Warning: the string "5 + * 3" could not be parsed by the miniparser.
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
   error
See also: execute, readfile, print, error, dieonerrormode
Go back to the list of commands

Name:

perturb indicates random perturbation of sampling points for externalplot

Library names:

sollya_obj_t sollya_lib_perturb() int sollya_lib_is_perturb(sollya_obj_t)

Usage:

perturb : perturb

Description:

Example 1:

   > bashexecute("gcc -fPIC -c externalplotexample.c");
   > bashexecute("gcc -shared -o externalplotexample externalplotexample.o -lgmp -lmpfr");
   > externalplot("./externalplotexample",relative,exp(x),[-1/2;1/2],12,perturb);
See also: externalplot, absolute, relative, bashexecute
Go back to the list of commands

Name:

pi the constant Pi.

Library names:

sollya_obj_t sollya_lib_pi() int sollya_lib_is_pi(sollya_obj_t) sollya_obj_t sollya_lib_build_function_pi() #define SOLLYA_PI (sollya_lib_build_function_pi())

Description:

Example 1:

   > verbosity=1!; prec=12!;
   > a = 2*pi;
   > a;
   Warning: rounding has happened. The value displayed is a faithful rounding to 12 bits of the true result.
   6.283
   > prec=20!;
   > a;
   Warning: rounding has happened. The value displayed is a faithful rounding to 20 bits of the true result.
   6.283187

Example 2:

   > display=binary;
   Display mode is binary numbers.
   > prec=12!;
   > d = [pi; 5];
   > d;
   [1.1001001_2 * 2^(1);1.01_2 * 2^(2)]
   > prec=20!;
   > d;
   [1.1001001_2 * 2^(1);1.01_2 * 2^(2)]
See also: cos, sin, tan, asin, acos, atan, evaluate, prec, libraryconstant
Go back to the list of commands

Name:

plot plots one or several functions

Library names:

void sollya_lib_plot(sollya_obj_t, sollya_obj_t, ...) void sollya_lib_v_plot(sollya_obj_t, sollya_obj_t, va_list)

Usage:

plot(f1, ... ,fn, I) : (function, ... ,function, range) -> void plot(f1, ... ,fn, I, file, name) : (function, ... ,function, range, file, string) -> void plot(f1, ... ,fn, I, postscript, name) : (function, ... ,function, range, postscript, string) -> void plot(f1, ... ,fn, I, postscriptfile, name) : (function, ... ,function, range, postscriptfile, string) -> void plot(L, I) : (list, range) -> void plot(L, I, file, name) : (list, range, file, string) -> void plot(L, I, postscript, name) : (list, range, postscript, string) -> void plot(L, I, postscriptfile, name) : (list, range, postscriptfile, string) -> void

Parameters:

Description:

Example 1:

   > plot(sin(x),0,cos(x),[-Pi,Pi]);

Example 2:

   > plot(sin(x),0,cos(x),[-Pi,Pi],postscriptfile,"plotSinCos");

Example 3:

   > plot(exp(0), sin(1), [0;1]);
   1
   0.84147098480789650665250232163029899962256306079837

Example 4:

   > plot(sin(x), cos(x), [1;1]);
   0.84147098480789650665250232163029899962256306079837
   0.54030230586813971740093660744297660373231042061792
See also: externalplot, asciiplot, file, postscript, postscriptfile, points
Go back to the list of commands

Name:

+ addition function

Library names:

sollya_obj_t sollya_lib_add(sollya_obj_t, sollya_obj_t) sollya_obj_t sollya_lib_build_function_add(sollya_obj_t, sollya_obj_t) #define SOLLYA_ADD(x,y) sollya_lib_build_function_add((x), (y))

Usage:

function1 + function2 : (function, function) -> function interval1 + interval2 : (range, range) -> range interval1 + constant : (range, constant) -> range interval1 + constant : (constant, range) -> range

Parameters:

Description:

Example 1:

   > 1 + 2;
   3

Example 2:

   > x + 2;
   2 + x

Example 3:

   > x + x;
   x * 2

Example 4:

   > diff(sin(x) + exp(x));
   cos(x) + exp(x)

Example 5:

   > [1;2] + [3;4];
   [4;6]
   > [1;2] + 17;
   [18;19]
   > 13 + [-4;17];
   [9;30]
See also: -, *, /, ^
Go back to the list of commands

Name:

points controls the number of points chosen by Sollya in certain commands.

Library names:

void sollya_lib_set_points_and_print(sollya_obj_t) void sollya_lib_set_points(sollya_obj_t) sollya_obj_t sollya_lib_get_points()

Usage:

points = n : integer -> void points = n ! : integer -> void points : constant

Parameters:

Description:

Example 1:

   > f=x^2*sin(1/x);
   > points=10;
   The number of points has been set to 10.
   > dirtyfindzeros(f, [0;1]);
   [|0, 0.318309886183790671537767526745028724068919291480918|]
   > points=100;
   The number of points has been set to 100.
   > dirtyfindzeros(f, [0;1]);
   [|0, 2.4485375860291590118289809749617594159147637806224e-2, 3.97887357729738339422209408431285905086149114351147e-2, 4.54728408833986673625382181064326748669884702115589e-2, 5.3051647697298445256294587790838120678153215246819e-2, 6.3661977236758134307553505349005744813783858296183e-2, 7.9577471545947667884441881686257181017229822870229e-2, 0.106103295394596890512589175581676241356306430493638, 0.159154943091895335768883763372514362034459645740459, 0.318309886183790671537767526745028724068919291480918|]
See also: dirtyinfnorm, dirtyintegral, dirtyfindzeros, plot, diam, prec
Go back to the list of commands

Name:

postscriptfile special value for commands plot and externalplot

Library names:

sollya_obj_t sollya_lib_postscriptfile() int sollya_lib_is_postscriptfile(sollya_obj_t)

Description:

Example 1:

   > savemode=postscriptfile;
   > name="plotSinCos";
   > plot(sin(x),0,cos(x),[-Pi,Pi],savemode, name);
See also: externalplot, plot, file, postscript
Go back to the list of commands

Name:

postscript special value for commands plot and externalplot

Library names:

sollya_obj_t sollya_lib_postscript() int sollya_lib_is_postscript(sollya_obj_t)

Description:

Example 1:

   > savemode=postscript;
   > name="plotSinCos";
   > plot(sin(x),0,cos(x),[-Pi,Pi],savemode, name);
See also: externalplot, plot, file, postscriptfile
Go back to the list of commands

Name:

^ power function

Library names:

sollya_obj_t sollya_lib_pow(sollya_obj_t, sollya_obj_t) sollya_obj_t sollya_lib_build_function_pow(sollya_obj_t, sollya_obj_t) #define SOLLYA_POW(x,y) sollya_lib_build_function_pow((x), (y))

Usage:

function1 ^ function2 : (function, function) -> function interval1 ^ interval2 : (range, range) -> range interval1 ^ constant : (range, constant) -> range interval1 ^ constant : (constant, range) -> range

Parameters:

Description:

Example 1:

   > 5 ^ 2;
   25

Example 2:

   > x ^ 2;
   x^2

Example 3:

   > 3 ^ (-5);
   4.1152263374485596707818930041152263374485596707818e-3

Example 4:

   > (-3) ^ (-2.5);
   @NaN@

Example 5:

   > diff(sin(x) ^ exp(x));
   sin(x)^exp(x) * ((cos(x) * exp(x)) / sin(x) + exp(x) * log(sin(x)))

Example 6:

   > 2^3^5;
   1.4134776518227074636666380005943348126619871175005e73
   > (2^3)^5;
   32768
   > 2^(3^5);
   1.4134776518227074636666380005943348126619871175005e73

Example 7:

   > [1;2] ^ [3;4];
   [1;1.60000000000000000000000000000000000000000000000007e1]
   > [1;2] ^ 17;
   [1;131072]
   > 13 ^ [-4;17];
   [3.501277966457757081334687160813696999404782745702e-5;8650415919381337933]
See also: +, -, *, /
Go back to the list of commands

Name:

powers special value for global state display

Library names:

sollya_obj_t sollya_lib_powers() int sollya_lib_is_powers(sollya_obj_t)

Description:

See also: decimal, dyadic, hexadecimal, binary, display
Go back to the list of commands

Name:

precision returns the precision necessary to represent a number.

Library name:

sollya_obj_t sollya_lib_precision(sollya_obj_t)

Usage:

precision(x) : constant -> integer

Parameters:

Description:

Example 1:

   > a=round(Pi,20,RN);
   > precision(a);
   19
   > m=mantissa(a);
   > ceil(log2(m));
   19
See also: mantissa, exponent, round
Go back to the list of commands

Name:

prec controls the precision used in numerical computations.

Library names:

void sollya_lib_set_prec_and_print(sollya_obj_t) void sollya_lib_set_prec(sollya_obj_t) sollya_obj_t sollya_lib_get_prec()

Description:

Example 1:

   > display=binary!;
   > prec=50;
   The precision has been set to 50 bits.
   > dirtyinfnorm(exp(x),[1;2]);
   1.110110001110011001001011100011010100110111011011_2 * 2^(2)
   > prec=100;
   The precision has been set to 100 bits.
   > dirtyinfnorm(exp(x),[1;2]);
   1.11011000111001100100101110001101010011011101101011011100110000110011101000111011101000100000011011_2 * 2^(2)
See also: evaluate, diam
Go back to the list of commands

Name:

.: add an element at the beginning of a list.

Library name:

sollya_obj_t sollya_lib_prepend(sollya_obj_t, sollya_obj_t)

Usage:

x.:L : (any type, list) -> list

Parameters:

Description:

Example 1:

   > 1.:[|2,3,4|];
   [|1, 2, 3, 4|]

Example 2:

   > [|1,2,3|].:[|4,5,6|];
   [|[|1, 2, 3|], 4, 5, 6|]

Example 3:

   > 1.:[||];
   [|1|]
See also: :., @
Go back to the list of commands

Name:

printdouble prints a constant value as a hexadecimal double precision number

Library name:

void sollya_lib_printdouble(sollya_obj_t)

Usage:

printdouble(constant) : constant -> void

Parameters:

Description:

Example 1:

   > printdouble(3);
   0x4008000000000000

Example 2:

   > prec=100!;
   > verbosity = 1!;
   > printdouble(exp(5));
   Warning: the given expression is not a constant but an expression to evaluate. A faithful evaluation to 100 bits will be used.
   Warning: rounding down occurred before printing a value as a double.
   0x40628d389970338f
See also: printsingle, printexpansion, double
Go back to the list of commands

Name:

printexpansion prints a polynomial in Horner form with its coefficients written as a expansions of double precision numbers

Library name:

void sollya_lib_printexpansion(sollya_obj_t)

Usage:

printexpansion(polynomial) : function -> void

Parameters:

Description:

Example 1:

   > printexpansion(roundcoefficients(taylor(exp(x),5,0),[|DD...|]));
   0x3ff0000000000000 + x * (0x3ff0000000000000 + x * (0x3fe0000000000000 + x * ((0x3fc5555555555555 + 0x3c65555555555555) + x * ((0x3fa5555555555555 + 0x3c45555555555555) + x * (0x3f81111111111111 + 0x3c01111111111111)))))

Example 2:

   > printexpansion(remez(exp(x),5,[-1;1]));
   (0x3ff0002eec90e5a6 + 0x3c9ea6a6a0087757 + 0xb8eb3e644ef44998) + x * ((0x3ff00028358fd3ac + 0x3c8ffa7d96c95f7a + 0xb91da9809b13dd54 + 0x35c0000000000000) + x * ((0x3fdff2d7e6a9fea5 + 0x3c74460e4c0e4fe2 + 0x38fcd1b6b4e85bb0 + 0x3590000000000000) + x * ((0x3fc54d6733b4839e + 0x3c6654e4d8614a44 + 0xb905c7a26b66ea92 + 0xb598000000000000) + x * ((0x3fa66c209b7150a8 + 0x3c34b1bba8f78092 + 0xb8c75f6eb90dae02 + 0x3560000000000000) + x * (0x3f81e554242ab128 + 0xbc23e920a76e760c + 0x38c0589c2cae6caf + 0x3564000000000000)))))

Example 3:

   > verbosity = 1!;
   > prec = 3500!;
   > printexpansion(pi);
   (0x400921fb54442d18 + 0x3ca1a62633145c07 + 0xb92f1976b7ed8fbc + 0x35c4cf98e804177d + 0x32631d89cd9128a5 + 0x2ec0f31c6809bbdf + 0x2b5519b3cd3a431b + 0x27e8158536f92f8a + 0x246ba7f09ab6b6a9 + 0xa0eedd0dbd2544cf + 0x1d779fb1bd1310ba + 0x1a1a637ed6b0bff6 + 0x96aa485fca40908e + 0x933e501295d98169 + 0x8fd160dbee83b4e0 + 0x8c59b6d799ae131c + 0x08f6cf70801f2e28 + 0x05963bf0598da483 + 0x023871574e69a459 + 0x8000000005702db3 + 0x8000000000000000)
   Warning: the expansion is not complete because of the limited exponent range of double precision.
   Warning: rounding occurred while printing.
See also: printdouble, horner, print, prec, remez, taylor, roundcoefficients, fpminimax, implementpoly
Go back to the list of commands

Name:

print prints an expression

Usage:

print(expr1,...,exprn) : (any type,..., any type) -> void print(expr1,...,exprn) > filename : (any type,..., any type, string) -> void print(expr1,...,exprn) >> filename : (any type,...,any type, string) -> void

Parameters:

Description:

Example 1:

   > print(x + 2 + exp(sin(x)));
   x + 2 + exp(sin(x))
   > print("Hello","world");
   Hello world
   > print("Hello","you", 4 + 3, "other persons.");
   Hello you 7 other persons.

Example 2:

   > print("Hello");
   Hello
   > print([|"Hello"|]);
   [|"Hello"|]
   > s = "Hello";
   > print(s,[|s|]);
   Hello [|"Hello"|]
   > t = "Hello\tyou";
   > print(t,[|t|]);
   Hello you [|"Hello\tyou"|]

Example 3:

   > print(x + 2 + exp(sin(x))) > "foo.sol";
   > readfile("foo.sol");
   x + 2 + exp(sin(x))
   

Example 4:

   > print(x + 2 + exp(sin(x))) >> "foo.sol";

Example 5:

   > display = decimal;
   Display mode is decimal numbers.
   > a = evaluate(sin(pi * x), 0.25);
   > b = evaluate(sin(pi * x), [0.25; 0.25 + 1b-50]);
   > print(a);
   0.70710678118654752440084436210484903928483593768847
   > display = binary;
   Display mode is binary numbers.
   > print(a);
   1.01101010000010011110011001100111111100111011110011001001000010001011001011111011000100110110011011101010100101010111110100111110001110101101111011000001011101010001_2 * 2^(-1)
   > display = hexadecimal;
   Display mode is hexadecimal numbers.
   > print(a);
   0xb.504f333f9de6484597d89b3754abe9f1d6f60ba88p-4
   > display = dyadic;
   Display mode is dyadic numbers.
   > print(a);
   33070006991101558613323983488220944360067107133265b-165
   > display = powers;
   Display mode is dyadic numbers in integer-power-of-2 notation.
   > print(a);
   33070006991101558613323983488220944360067107133265 * 2^(-165)
   > display = decimal;
   Display mode is decimal numbers.
   > midpointmode = off;
   Midpoint mode has been deactivated.
   > print(b);
   [0.70710678118654752440084436210484903928483593768844;0.70710678118654949743721782517557347782646274417048]
   > midpointmode = on;
   Midpoint mode has been activated.
   > print(b);
   0.7071067811865~4/5~
   > display = dyadic;
   Display mode is dyadic numbers.
   > print(b);
   [2066875436943847413332748968013809022504194195829b-161;16535003495550825444196237019385936414432675156571b-164]
   > display = decimal;
   Display mode is decimal numbers.
   > autosimplify = off;
   Automatic pure tree simplification has been deactivated.
   > fullparentheses = off;
   Full parentheses mode has been deactivated.
   > print(x + x * ((x + 1) + 1));
   x + x * (x + 1 + 1)
   > fullparentheses = on;
   Full parentheses mode has been activated.
   > print(x + x * ((x + 1) + 1));
   x + (x * ((x + 1) + 1))
See also: write, printexpansion, printdouble, printsingle, printxml, readfile, autosimplify, display, midpointmode, fullparentheses, evaluate, rationalmode
Go back to the list of commands

Name:

printsingle prints a constant value as a hexadecimal single precision number

Library name:

void sollya_lib_printsingle(sollya_obj_t)

Usage:

printsingle(constant) : constant -> void

Parameters:

Description:

Example 1:

   > printsingle(3);
   0x40400000

Example 2:

   > prec=100!;
   > verbosity = 1!;
   > printsingle(exp(5));
   Warning: the given expression is not a constant but an expression to evaluate. A faithful evaluation to 100 bits will be used.
   Warning: rounding down occurred before printing a value as a single.
   0x431469c5
See also: printdouble, single
Go back to the list of commands

Name:

printxml prints an expression as an MathML-Content-Tree

Library names:

void sollya_lib_printxml(sollya_obj_t) void sollya_lib_printxml_newfile(sollya_obj_t, sollya_obj_t) void sollya_lib_printxml_appendfile(sollya_obj_t, sollya_obj_t)

Usage:

printxml(expr) : function -> void printxml(expr) > filename : (function, string) -> void printxml(expr) > > filename : (function, string) -> void

Parameters:

Description:

Example 1:

   > printxml(x + 2 + exp(sin(x)));
   
   <?xml version="1.0" encoding="UTF-8"?>
   <!-- generated by sollya: http://sollya.gforge.inria.fr/ -->
   <!-- syntax: printxml(...);   example: printxml(x^2-2*x+5); -->
   <?xml-stylesheet type="text/xsl" href="http://sollya.gforge.inria.fr/mathmlc2p-web.xsl"?>
   <?xml-stylesheet type="text/xsl" href="mathmlc2p-web.xsl"?>
   <!-- This stylesheet allows direct web browsing of MathML-c XML files (http:// or file://) -->
   
   <math xmlns="http://www.w3.org/1998/Math/MathML">
   <semantics>
   <annotation-xml encoding="MathML-Content">
   <lambda>
   <bvar><ci> x </ci></bvar>
   <apply>
   <apply>
   <plus/>
   <apply>
   <plus/>
   <ci> x </ci>
   <cn type="integer" base="10"> 2 </cn>
   </apply>
   <apply>
   <exp/>
   <apply>
   <sin/>
   <ci> x </ci>
   </apply>
   </apply>
   </apply>
   </apply>
   </lambda>
   </annotation-xml>
   <annotation encoding="sollya/text">(x + 1b1) + exp(sin(x))</annotation>
   </semantics>
   </math>
   

Example 2:

   > printxml(x + 2 + exp(sin(x))) > "foo.xml";

Example 3:

   > printxml(x + 2 + exp(sin(x))) >> "foo.xml";
See also: readxml, print, write
Go back to the list of commands

Name:

procedure defines and assigns a Sollya procedure

Usage:

procedure identifier(formal parameter1, formal parameter2,..., formal parameter n) { procedure body } : void -> void procedure identifier(formal parameter1, formal parameter2,..., formal parameter n) { procedure body return expression; } : void -> void procedure identifier(formal list parameter = ...) { procedure body } : void -> void procedure identifier(formal list parameter = ...) { procedure body return expression; } : void -> void

Parameters:

Description:

Example 1:

   > procedure succ(n) { return n + 1; };
   > succ(5);
   6
   > 3 + succ(0);
   4
   > succ;
   proc(n)
   {
   nop;
   return (n) + (1);
   }

Example 2:

   > procedure myprint(L = ...) { var i; for i in L do i; };
   > myprint("Lyon","Nancy","Beaverton","Coye-la-Foret","Amberg","Nizhny Novgorod","Cluj-Napoca");
   Lyon
   Nancy
   Beaverton
   Coye-la-Foret
   Amberg
   Nizhny Novgorod
   Cluj-Napoca
See also: proc, var, bind
Go back to the list of commands

Name:

proc defines a Sollya procedure

Usage:

proc(formal parameter1, formal parameter2,..., formal parameter n) { procedure body } : void -> procedure proc(formal parameter1, formal parameter2,..., formal parameter n) { procedure body return expression; } : void -> procedure proc(formal list parameter = ...) { procedure body } : void -> procedure proc(formal list parameter = ...) { procedure body return expression; } : void -> procedure

Parameters:

Description:

Example 1:

   > succ = proc(n) { return n + 1; };
   > succ(5);
   6
   > 3 + succ(0);
   4
   > succ;
   proc(n)
   {
   nop;
   return (n) + (1);
   }

Example 2:

   > add = proc(m,n) { var res; res := m + n; return res; };
   > add(5,6);
   11
   > add;
   proc(m, n)
   {
   var res;
   res := (m) + (n);
   return res;
   }
   > verbosity = 1!;
   > add(3);
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
   error
   > add(true,false);
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
   Warning: the given expression or command could not be handled.
   error

Example 3:

   > succ = proc(n) { return n + 1; };
   > succ(5);
   6
   > succ(x);
   1 + x

Example 4:

   > hey = proc() { print("Hello world."); };
   > hey();
   Hello world.
   > print(hey());
   Hello world.
   void
   > hey;
   proc()
   {
   print("Hello world.");
   return void;
   }

Example 5:

   > fac = proc(n) { var res; if (n == 0) then res := 1 else res := n * fac(n - 1); return res; };
   > fac(5);
   120
   > fac(11);
   39916800
   > fac;
   proc(n)
   {
   var res;
   if (n) == (0) then
   res := 1
   else
   res := (n) * (fac((n) - (1)));
   return res;
   }

Example 6:

   > myprocs = [| proc(m,n) { return m + n; }, proc(m,n) { return m - n; } |];
   > (myprocs[0])(5,6);
   11
   > (myprocs[1])(5,6);
   -1
   > succ = proc(n) { return n + 1; };
   > pred = proc(n) { return n - 1; };
   > applier = proc(p,n) { return p(n); };
   > applier(succ,5);
   6
   > applier(pred,5);
   4

Example 7:

   > verbosity = 1!;
   > myquit = proc(n) { print(n); quit; };
   > myquit;
   proc(n)
   {
   print(n);
   quit;
   return void;
   }
   > myquit(5);
   Warning: a quit or restart command may not be part of a procedure body.
   The procedure will not be executed.
   Warning: an error occurred while executing a procedure.
   Warning: the given expression or command could not be handled.
   error

Example 8:

   > printsucc = proc(n) { var succ; succ = proc(n) { return n + 1; }; print("Successor of",n,"is",succ(n)); };
   > printsucc(5);
   Successor of 5 is 6

Example 9:

   > makeadd = proc(n) { var add; print("n =",n); add = proc(m,n) { return n + m; }; return add; };
   > makeadd(4);
   n = 4
   proc(m, n)
   {
   nop;
   return (n) + (m);
   }
   > (makeadd(4))(5,6);
   n = 4
   11

Example 10:

   > sumall = proc(L = ...) { var acc, i; acc = 0; for i in L do acc = acc + i; return acc; };
   > sumall;
   proc(L = ...)
   {
   var acc, i;
   acc = 0;
   for i in L do
   acc = (acc) + (i);
   return acc;
   }
   > sumall();
   0
   > sumall(2);
   2
   > sumall(2,5);
   7
   > sumall(2,5,7,9,16);
   39
   > sumall @ [|1,...,10|];
   55
See also: return, externalproc, void, quit, restart, var, @, bind, error
Go back to the list of commands

Name:

QD short form for quad
See also: quad
Go back to the list of commands

Names:

quad, QD rounding to the nearest IEEE 754 quad (binary128).

Library names:

sollya_obj_t sollya_lib_quad(sollya_obj_t) sollya_obj_t sollya_lib_quad_obj() int sollya_lib_is_quad_obj(sollya_obj_t) sollya_obj_t sollya_lib_build_function_quad(sollya_obj_t) #define SOLLYA_QD(x) sollya_lib_build_function_quad(x)

Description:

Example 1:

   > display=binary!;
   > QD(0.1);
   1.100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001101_2 * 2^(-4)
   > QD(4.17);
   1.000010101110000101000111101011100001010001111010111000010100011110101110000101000111101011100001010001111010111_2 * 2^(2)
   > QD(1.011_2 * 2^(-16493));
   1.1_2 * 2^(-16493)
See also: halfprecision, single, double, doubleextended, doubledouble, tripledouble, roundcoefficients, implementpoly, fpminimax, round, printsingle
Go back to the list of commands

Name:

quit quits Sollya

Usage:

quit : void -> void

Description:

Example 1:

   > quit;
See also: restart, execute, plot, externalplot, return
Go back to the list of commands

Name:

range keyword representing a range type

Usage:

range : type type

Description:

See also: externalproc, boolean, constant, function, integer, list of, string, object
Go back to the list of commands

Name:

rationalapprox returns a fraction close to a given number.

Library name:

sollya_obj_t sollya_lib_rationalapprox(sollya_obj_t, sollya_obj_t)

Usage:

rationalapprox(x,n) : (constant, integer) -> function

Parameters:

Description:

Example 1:

   > pi10 = rationalapprox(Pi,10);
   > pi50 = rationalapprox(Pi,50);
   > pi100 = rationalapprox(Pi,100);
   > print( pi10, ": ", dirtysimplify(floor(-log2(abs(pi10-Pi)/Pi))), "bits." );
   3.140625 :  11 bits.
   > print( pi50, ": ", dirtysimplify(floor(-log2(abs(pi50-Pi)/Pi))), "bits." );
   85563208 / 27235615 :  51 bits.
   > print( pi100, ": ", dirtysimplify(floor(-log2(abs(pi100-Pi)/Pi))), "bits." );
   4422001152019829 / 1407566683404023 :  100 bits.

Example 2:

   > a=0.1;
   > b=rationalapprox(a,4);
   > numerator(b); denominator(b);
   1
   10
   > print(dirtysimplify(floor(-log2(abs((b-a)/a)))), "bits.");
   166 bits.
See also: print, numerator, denominator, rationalmode
Go back to the list of commands

Name:

rationalmode global variable controlling if rational arithmetic is used or not.

Library names:

void sollya_lib_set_rationalmode_and_print(sollya_obj_t) void sollya_lib_set_rationalmode(sollya_obj_t) sollya_obj_t sollya_lib_get_rationalmode()

Usage:

rationalmode = activation value : on|off -> void rationalmode = activation value ! : on|off -> void rationalmode : on|off

Parameters:

Description:

Example 1:

   > rationalmode=off!;
   > 19/17 + 3/94;
   1.1495619524405506883604505632040050062578222778473
   > rationalmode=on!;
   > 19/17 + 3/94;
   1837 / 1598

Example 2:

   > rationalmode=off!;
   > exp(19/17 + 3/94);
   3.15680977395514136754709208944824276340328162814418
   > rationalmode=on!;
   > exp(19/17 + 3/94);
   3.15680977395514136754709208944824276340328162814418
See also: on, off, numerator, denominator, simplify, rationalapprox, autosimplify
Go back to the list of commands

Name:

RD constant representing rounding-downwards mode.

Library names:

sollya_obj_t sollya_lib_round_down() int sollya_lib_is_round_down(sollya_obj_t)

Description:

Example 1:

   > display=binary!;
   > round(Pi,20,RD);
   1.1001001000011111101_2 * 2^(1)
See also: RZ, RU, RN, round, floor
Go back to the list of commands

Name:

readfile reads the content of a file into a string variable

Usage:

readfile(filename) : string -> string

Parameters:

Description:

Example 1:

   > print("Hello world") > "myfile.txt";
   > t = readfile("myfile.txt");
   > t;
   Hello world
   

Example 2:

   > verbosity=1!;
   > readfile("afile.txt");
   Warning: the file "afile.txt" could not be opened for reading.
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
   error
See also: parse, execute, write, print, bashexecute, error
Go back to the list of commands

Name:

readxml reads an expression written as a MathML-Content-Tree in a file

Library name:

sollya_obj_t sollya_lib_readxml(sollya_obj_t)

Usage:

readxml(filename) : string -> function | error

Parameters:

Description:

Example 1:

   > readxml("readxmlexample.xml");
   2 + _x_ + exp(sin(_x_))
See also: printxml, readfile, parse, error
Go back to the list of commands

Name:

relative indicates a relative error for externalplot, fpminimax or supnorm

Library names:

sollya_obj_t sollya_lib_relative() int sollya_lib_is_relative(sollya_obj_t)

Usage:

relative : absolute|relative

Description:

Example 1:

   > bashexecute("gcc -fPIC -c externalplotexample.c");
   > bashexecute("gcc -shared -o externalplotexample externalplotexample.o -lgmp -lmpfr");
   > externalplot("./externalplotexample",absolute,exp(x),[-1/2;1/2],12,perturb);
See also: externalplot, fpminimax, absolute, bashexecute, supnorm
Go back to the list of commands

Name:

remez computes the minimax of a function on an interval.

Library names:

sollya_obj_t sollya_lib_remez(sollya_obj_t, sollya_obj_t, sollya_obj_t, ...) sollya_obj_t sollya_lib_v_remez(sollya_obj_t, sollya_obj_t, sollya_obj_t,                                 va_list)

Usage:

remez(f, n, range, w, quality, bounds) : (function, integer, range, function, constant, range) -> function remez(f, L, range, w, quality, bounds) : (function, list, range, function, constant, range) -> function

Parameters:

Description:

Example 1:

   > p = remez(exp(x),5,[0;1]);
   > degree(p);
   5
   > dirtyinfnorm(p-exp(x),[0;1]);
   1.12956981510961487071711938292660776072226345893629e-6

Example 2:

   > p = remez(1,[|0,2,4,6,8|],[0,Pi/4],1/cos(x));
   > canonical=on!;
   > p;
   0.99999999994393732180959690352543887130348096061124 + -0.499999995715568577687720530637215446709494672222587 * x^2 + 4.1666613233473633009941059480570275870113220089059e-2 * x^4 + -1.3886529147145693651355523880319714051047635695061e-3 * x^6 + 2.4372679177224179934800328511009205218114284220126e-5 * x^8

Example 3:

   > p1 = remez(exp(x),5,[0;1],default,1e-5);
   > p2 = remez(exp(x),5,[0;1],default,1e-10);
   > p3 = remez(exp(x),5,[0;1],default,1e-15);
   > dirtyinfnorm(p1-exp(x),[0;1]);
   1.12956981510961487071711938292660776072226345893629e-6
   > dirtyinfnorm(p2-exp(x),[0;1]);
   1.12956980227478675612619255125474525171079325793124e-6
   > dirtyinfnorm(p3-exp(x),[0;1]);
   1.12956980227478675612619255125474525171079325793124e-6

Example 4:

   > L = [|exp(x), sin(x), cos(x)-1, sin(x^3)|];
   > g = (2^x-1)/x;
   > p1 = remez(g, L, [-1/16;1/16]);
   > p2 = remez(g, 3, [-1/16;1/16]);
   > dirtyinfnorm(p1 - g, [-1/16;1/16]);
   9.8841323829271038137685646777951687620288462194745e-8
   > dirtyinfnorm(p2 - g, [-1/16;1/16]);
   2.54337800593461418356437401152248866818783932027105e-9

Example 5:

   > f = sin(x);
   > I = [-3b-5;-1b-1074];
   > time(popt = remez(1, [|1, 3, 4, 5, 7, 8, 9|], I, 1/f));
   0.56247400000000000001854072451124011422507464885711
   > time(p1 = remez(1, [|1, 3, 4, 5, 7, 8, 9|], I, 1/f, default, [0, 1b-73]));
   0.349992999999999999959955643280551385032595135271549
   > time(p2 = remez(1, [|1, 3, 4, 5, 7, 8, 9|], I, 1/f, default, [3b-72, +@Inf@]));
   0.4416959999999999999685182383579729048506123945117
   > dirtyinfnorm(popt/f-1, I);
   2.06750931454112835098093903810531156576504665659064e-22
   > dirtyinfnorm(p1/f-1, I);
   2.49711266837493110470637913808914046704452778960875e-22
   > dirtyinfnorm(p2/f-1, I);
   5.4567247553615435246376977231253834265248756996947e-22
   > 1b-73;
   1.05879118406787542383540312584955245256423950195312e-22
   > 3b-72;
   6.3527471044072525430124187550973147153854370117187e-22
See also: dirtyinfnorm, infnorm, fpminimax, guessdegree, taylorform, taylor
Go back to the list of commands

Name:

rename rename the free variable.

Library name:

void sollya_lib_name_free_variable(const char *)

Usage:

rename(ident1,ident2) : void

Parameters:

Description:

Example 1:

   > f=sin(x);
   > f;
   sin(x)
   > rename(x,y);
   > f;
   sin(y)

Example 2:

   > a=1;
   > f=sin(x);
   > rename(x,a);
   > a;
   a
   > f;
   sin(a)

Example 3:

   > verbosity=1!;
   > f=sin(x);
   > rename(y, z);
   Warning: the current free variable is named "x" and not "y". Can only rename the free variable.
   The last command will have no effect.
   > rename(_x_, z);
   Information: the free variable has been renamed from "x" to "z".

Example 4:

   > verbosity=1!;
   > rename(x,y);
   Information: the free variable has been named "y".
   > isbound(x);
   false
   > isbound(y);
   true
See also: isbound
Go back to the list of commands

Name:

restart brings Sollya back to its initial state

Usage:

restart : void -> void

Description:

Example 1:

   > print(exp(x));
   exp(x)
   > a = 3;
   > restart;
   The tool has been restarted.
   > print(x);
   x
   > a;
   Warning: the identifier "a" is neither assigned to, nor bound to a library function nor external procedure, nor equal to the current free variable.
   Will interpret "a" as "x".
   x

Example 2:

   > print(exp(x));
   exp(x)
   > for i from 1 to 10 do {
     print(i);
     if (i == 5) then restart;
     };
   1
   2
   3
   4
   5
   The tool has been restarted.
   Warning: the tool has been restarted inside a for loop.
   The for loop will no longer be executed.

Example 3:

   > print(exp(x));
   exp(x)
   > a = 3;
   > for i from 1 to 10 do {
     print(i);
     if (i == 5) then {
     restart;
     i = 7;
     };
     };
   1
   2
   3
   4
   5
   The tool has been restarted.
   8
   9
   10
   > print(x);
   x
   > a;
   Warning: the identifier "a" is neither assigned to, nor bound to a library function nor external procedure, nor equal to the current free variable.
   Will interpret "a" as "x".
   x
See also: quit, execute
Go back to the list of commands

Name:

return indicates an expression to be returned in a procedure

Usage:

return expression : void

Parameters:

Description:

Example 1:

   > succ = proc(n) { var res; res := n + 1; return res; };
   > succ(5);
   6
   > succ;
   proc(n)
   {
   var res;
   res := (n) + (1);
   return res;
   }

Example 2:

   > hey = proc(s) { print("Hello",s); };
   > hey("world");
   Hello world
   > hey;
   proc(s)
   {
   print("Hello", s);
   return void;
   }
See also: proc, void
Go back to the list of commands

Name:

revert reverts a list.

Library name:

sollya_obj_t sollya_lib_revert(sollya_obj_t)

Usage:

revert(L) : list -> list

Parameters:

Description:

Example 1:

   > revert([| |]);
   [| |]

Example 2:

   > revert([|2,3,5,2,1,4|]);
   [|4, 1, 2, 5, 3, 2|]
Go back to the list of commands

Name:

RN constant representing rounding-to-nearest mode.

Library names:

sollya_obj_t sollya_lib_round_to_nearest() int sollya_lib_is_round_to_nearest(sollya_obj_t)

Description:

Example 1:

   > display=binary!;
   > round(Pi,20,RN);
   1.100100100001111111_2 * 2^(1)
See also: RD, RU, RZ, round, nearestint
Go back to the list of commands

Name:

roundcoefficients rounds the coefficients of a polynomial to classical formats.

Library name:

sollya_obj_t sollya_lib_roundcoefficients(sollya_obj_t, sollya_obj_t)

Usage:

roundcoefficients(p,L) : (function, list) -> function

Parameters:

Description:

Example 1:

   > p=exp(1) + x*(exp(2) + x*exp(3));
   > display=binary!;
   > roundcoefficients(p,[|DD,D,D|]);
   1.010110111111000010101000101100010100010101110110100101010011010101011111101110001010110001000000010011101_2 * 2^(1) + x * (1.110110001110011001001011100011010100110111011010111_2 * 2^(2) + x * (1.010000010101111001011011111101101111101100010000011_2 * 2^(4)))
   > roundcoefficients(p,[|DD,D...|]);
   1.010110111111000010101000101100010100010101110110100101010011010101011111101110001010110001000000010011101_2 * 2^(1) + x * (1.110110001110011001001011100011010100110111011010111_2 * 2^(2) + x * (1.010000010101111001011011111101101111101100010000011_2 * 2^(4)))

Example 2:

   > f=sin(exp(1)*x);
   > display=binary!;
   > f;
   sin(x * (1.0101101111110000101010001011000101000101011101101001010100110101010111111011100010101100010000000100111001111010011110011110001110110001011100111000101100000111101_2 * 2^(1)))
   > roundcoefficients(f,[|D...|]);
   sin(x * (1.0101101111110000101010001011000101000101011101101001010100110101010111111011100010101100010000000100111001111010011110011110001110110001011100111000101100000111101_2 * 2^(1)))

Example 3:

   > p=exp(1) + x*(exp(2) + x*exp(3));
   > verbosity=1!;
   > display=binary!;
   > roundcoefficients(p,[|DD,D|]);
   Warning: the number of the given formats does not correspond to the degree of the given polynomial.
   Warning: the 0th coefficient of the given polynomial does not evaluate to a floating-point constant without any rounding.
   Will evaluate the coefficient in the current precision in floating-point before rounding to the target format.
   Warning: the 1th coefficient of the given polynomial does not evaluate to a floating-point constant without any rounding.
   Will evaluate the coefficient in the current precision in floating-point before rounding to the target format.
   Warning: rounding may have happened.
   1.010110111111000010101000101100010100010101110110100101010011010101011111101110001010110001000000010011101_2 * 2^(1) + x * (1.110110001110011001001011100011010100110111011010111_2 * 2^(2) + x * (1.01000001010111100101101111110110111110110001000001011111001011010100101111011111110001010011011101000100110000111010001110010000010110000101100000111001011100101001_2 * 2^(4)))
See also: halfprecision, single, double, doubleextended, doubledouble, quad, tripledouble, fpminimax, remez, implementpoly, subpoly
Go back to the list of commands

Name:

roundcorrectly rounds an approximation range correctly to some precision

Library name:

sollya_obj_t sollya_lib_roundcorrectly(sollya_obj_t)

Usage:

roundcorrectly(range) : range -> constant

Parameters:

Description:

Example 1:

   > printbinary(roundcorrectly([1.010001_2; 1.0101_2]));
   1.01_2
   > printbinary(roundcorrectly([1.00001_2; 1.001_2]));
   1_2

Example 2:

   > roundcorrectly([-1; 1]);
   @NaN@
See also: round, mantissa, exponent, precision
Go back to the list of commands

Name:

roundingwarnings global variable controlling whether or not a warning is displayed when roundings occur.

Library names:

void sollya_lib_set_roundingwarnings_and_print(sollya_obj_t) void sollya_lib_set_roundingwarnings(sollya_obj_t) sollya_obj_t sollya_lib_get_roundingwarnings()

Usage:

roundingwarnings = activation value : on|off -> void roundingwarnings = activation value ! : on|off -> void roundingwarnings : on|off

Parameters:

Description:

Example 1:

   > verbosity=1!;
   > roundingwarnings = on;
   Rounding warning mode has been activated.
   > exp(0.1);
   Warning: Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   Warning: rounding has happened. The value displayed is a faithful rounding to 165 bits of the true result.
   1.1051709180756476248117078264902466682245471947375
   > roundingwarnings = off;
   Rounding warning mode has been deactivated.
   > exp(0.1);
   1.1051709180756476248117078264902466682245471947375
See also: on, off, verbosity, midpointmode, rationalmode, suppressmessage, unsuppressmessage, showmessagenumbers, getsuppressedmessages
Go back to the list of commands

Name:

round rounds a number to a floating-point format.

Library name:

sollya_obj_t sollya_lib_round(sollya_obj_t, sollya_obj_t, sollya_obj_t)

Usage:

round(x,n,mode) : (constant, integer, RN|RZ|RU|RD) -> constant round(x,format,mode) : (constant, HP|halfprecision|SG|single|D|double|DE|doubleextended|DD|doubledouble|QD|quad|TD|tripledouble, RN|RZ|RU|RD) -> constant

Parameters:

Description:

Example 1:

   > display=binary!;
   > round(Pi,20,RN);
   1.100100100001111111_2 * 2^(1)

Example 2:

   > printdouble(round(exp(17),53,RU));
   0x417709348c0ea4f9
   > printdouble(D(exp(17)));
   0x417709348c0ea4f9

Example 3:

   > display=binary!;
   > a=2^(-1100);
   > round(a,53,RN);
   1_2 * 2^(-1100)
   > round(a,D,RN);
   0
   > double(a);
   0
See also: RN, RD, RU, RZ, halfprecision, single, double, doubleextended, doubledouble, quad, tripledouble, roundcoefficients, roundcorrectly, printdouble, printsingle, ceil, floor, nearestint
Go back to the list of commands

Name:

RU constant representing rounding-upwards mode.

Library names:

sollya_obj_t sollya_lib_round_up() int sollya_lib_is_round_up(sollya_obj_t)

Description:

Example 1:

   > display=binary!;
   > round(Pi,20,RU);
   1.100100100001111111_2 * 2^(1)
See also: RZ, RD, RN, round, ceil
Go back to the list of commands

Name:

RZ constant representing rounding-to-zero mode.

Library names:

sollya_obj_t sollya_lib_round_towards_zero() int sollya_lib_is_round_towards_zero(sollya_obj_t)

Description:

Example 1:

   > display=binary!;
   > round(Pi,20,RZ);
   1.1001001000011111101_2 * 2^(1)
See also: RD, RU, RN, round, floor, ceil
Go back to the list of commands

Name:

searchgal searches for a preimage of a function such that the rounding the image yields an error smaller than a constant

Library name:

sollya_obj_t sollya_lib_searchgal(sollya_obj_t, sollya_obj_t, sollya_obj_t,                                   sollya_obj_t, sollya_obj_t, sollya_obj_t)

Usage:

searchgal(function, start, preimage precision, steps, format, error bound) : (function, constant, integer, integer, HP|halfprecision|SG|single|D|double|DE|doubleextended|DD|doubledouble|QD|quad|TD|tripledouble, constant) -> list searchgal(list of functions, start, preimage precision, steps, list of format, list of error bounds) : (list, constant, integer, integer, list, list) -> list

Parameters:

Description:

Example 1:

   > searchgal(log(x),2,53,15,DD,1b-112);
   [| |]
   > searchgal(log(x),2,53,18,DD,1b-112);
   [|2.0000000000384972054234822280704975128173828125|]

Example 2:

   > f = exp(x);
   > s = searchgal(f,2,53,18,DD,1b-112);
   > if (s != [||]) then {
        v = s[0];
        print("The rounding error is 2^(",evaluate(log2(abs(DD(f)/f - 1)),v),")");
     } else print("No value found");
   The rounding error is 2^( -1.12106878438809380148206984258358542322113874177832e2 )

Example 3:

   > searchgal([|sin(x),cos(x)|],1,53,15,[|D,D|],[|1b-62,1b-60|]);
   [|1.00000000000159494639717649988597258925437927246094|]
See also: round, double, doubledouble, tripledouble, evaluate, worstcase
Go back to the list of commands

Name:

SG short form for single
See also: single
Go back to the list of commands

Name:

showmessagenumbers activates, deactivates or inspects the state variable controlling the displaying of numbers for messages

Library names:

void sollya_lib_set_showmessagenumbers_and_print(sollya_obj_t) void sollya_lib_set_showmessagenumbers(sollya_obj_t) sollya_obj_t sollya_lib_get_showmessagenumbers()

Usage:

showmessagenumbers = activation value : on|off -> void showmessagenumbers = activation value ! : on|off -> void showmessagenumbers : on|off

Parameters:

Description:

Example 1:

   > verbosity = 1;
   The verbosity level has been set to 1.
   > 0.1;
   Warning: Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   0.1
   > showmessagenumbers = on;
   Displaying of message numbers has been activated.
   > 0.1;
   Warning (174): Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   0.1
   > showmessagenumbers;
   on
   > showmessagenumbers = off!;
   > 0.1;
   Warning: Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   0.1

Example 2:

   > showmessagenumbers = on;
   Displaying of message numbers has been activated.
   > verbosity = 1;
   The verbosity level has been set to 1.
   > diff(0.1 * x + 1.5 * x^2);
   Warning (174): Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   0.1 + 3 * x
   > verbosity = 0;
   The verbosity level has been set to 0.
   > diff(0.1 * x + 1.5 * x^2);
   0.1 + 3 * x
   > verbosity = 12;
   The verbosity level has been set to 12.
   > diff(0.1 * x + 1.5 * x^2);
   Warning (174): Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   Information (196): formally differentiating a function.
   Information (197): differentiating the expression '0.1 * x + 1.5 * x^2'
   Information (205): extraction of coefficient terms from a polynomial uses a special algorithm for canonical forms.
   Information (195): expression '0.1 + 2 * 1.5 * x' has been simplified to expression '0.1 + 3 * x'.
   Information (207): no Horner simplification will be performed because the given tree is already in Horner form.
   0.1 + 3 * x
See also: getsuppressedmessages, suppressmessage, unsuppressmessage, verbosity, roundingwarnings
Go back to the list of commands

Name:

simplify simplifies an expression representing a function

Library name:

sollya_obj_t sollya_lib_simplify(sollya_obj_t)

Usage:

simplify(function) : function -> function

Parameters:

Description:

Example 1:

   > print(simplify((6 + 2) + (5 + exp(0)) * x));
   8 + 6 * x

Example 2:

   > print(simplify((log(x - x + 1) + asin(1))));
   (pi) / 2

Example 3:

   > print(simplify((log(x - x + 1) + asin(1)) - (atan(1) * 2)));
   (pi) / 2 - (pi) / 4 * 2
See also: dirtysimplify, autosimplify, rationalmode, horner
Go back to the list of commands

Names:

single, SG rounding to the nearest IEEE 754 single (binary32).

Library names:

sollya_obj_t sollya_lib_single(sollya_obj_t) sollya_obj_t sollya_lib_single_obj() int sollya_lib_is_single_obj(sollya_obj_t) sollya_obj_t sollya_lib_build_function_single(sollya_obj_t) #define SOLLYA_SG(x) sollya_lib_build_function_single(x)

Description:

Example 1:

   > display=binary!;
   > SG(0.1);
   1.10011001100110011001101_2 * 2^(-4)
   > SG(4.17);
   1.000010101110000101001_2 * 2^(2)
   > SG(1.011_2 * 2^(-1073));
   0
See also: halfprecision, double, doubleextended, doubledouble, quad, tripledouble, roundcoefficients, implementpoly, round, printsingle
Go back to the list of commands

Name:

sinh the hyperbolic sine function.

Library names:

sollya_obj_t sollya_lib_sinh(sollya_obj_t) sollya_obj_t sollya_lib_build_function_sinh(sollya_obj_t) #define SOLLYA_SINH(x) sollya_lib_build_function_sinh(x)

Description:

See also: asinh, cosh, tanh
Go back to the list of commands

Name:

sin the sine function.

Library names:

sollya_obj_t sollya_lib_sin(sollya_obj_t) sollya_obj_t sollya_lib_build_function_sin(sollya_obj_t) #define SOLLYA_SIN(x) sollya_lib_build_function_sin(x)

Description:

See also: asin, cos, tan
Go back to the list of commands

Name:

sort sorts a list of real numbers.

Library name:

sollya_obj_t sollya_lib_sort(sollya_obj_t)

Usage:

sort(L) : list -> list

Parameters:

Description:

Example 1:

   > sort([| |]);
   [| |]
   > sort([|2,3,5,2,1,4|]);
   [|1, 2, 2, 3, 4, 5|]
Go back to the list of commands

Name:

sqrt square root.

Library names:

sollya_obj_t sollya_lib_sqrt(sollya_obj_t) sollya_obj_t sollya_lib_build_function_sqrt(sollya_obj_t) #define SOLLYA_SQRT(x) sollya_lib_build_function_sqrt(x)

Description:

Go back to the list of commands

Name:

string keyword representing a string type

Usage:

string : type type

Description:

See also: externalproc, boolean, constant, function, integer, list of, range, object
Go back to the list of commands

Name:

subpoly restricts the monomial basis of a polynomial to a list of monomials

Library name:

sollya_obj_t sollya_lib_subpoly(sollya_obj_t, sollya_obj_t)

Usage:

subpoly(polynomial, list) : (function, list) -> function

Parameters:

Description:

Example 1:

   > p = taylor(exp(x),5,0);
   > s = subpoly(p,[|1,3,5|]);
   > print(p);
   1 + x * (1 + x * (0.5 + x * (1 / 6 + x * (1 / 24 + x / 120))))
   > print(s);
   x * (1 + x^2 * (1 / 6 + x^2 / 120))

Example 2:

   > p = remez(atan(x),10,[-1,1]);
   > subpoly(p,[|1,3,5...|]);
   x * (0.99986632941452949026018468446163586361700915018231 + x^2 * (-0.33030478502455936362667794059988443130926433421739 + x^2 * (0.18015929317818756462894237037824735129130095574422 + x * (2.28455841154247882851125015653585766424298569630719e-9 + x * (-8.5156349064111377895500552996061844977507560037484e-2 + x * (-2.71756340962775019916818769239340943524383018921799e-9 + x * (2.08451134307114729373239910549169872454686955894998e-2 + x * 1.10889861181129057657199664386826630081793400489512e-9)))))))

Example 3:

   > subpoly(exp(x),[|1,2,3|]);
   0
See also: roundcoefficients, taylor, remez, fpminimax, implementpoly
Go back to the list of commands

Name:

substitute replace the occurrences of the free variable in an expression.

Library name:

sollya_obj_t sollya_lib_substitute(sollya_obj_t, sollya_obj_t)

Usage:

substitute(f,g) : (function, function) -> function substitute(f,t) : (function, constant) -> constant

Parameters:

Description:

Example 1:

   > f=sin(x);
   > g=cos(x);
   > substitute(f,g);
   sin(cos(x))
   > f(g);
   sin(cos(x))

Example 2:

   > a=1;
   > f=sin(x);
   > substitute(f,a);
   0.84147098480789650665250232163029899962256306079837
   > f(a);
   0.84147098480789650665250232163029899962256306079837
See also: evaluate, composepolynomials
Go back to the list of commands

Name:

supnorm computes an interval bounding the supremum norm of an approximation error (absolute or relative) between a given polynomial and a function.

Library name:

sollya_obj_t sollya_lib_supnorm(sollya_obj_t, sollya_obj_t, sollya_obj_t,                                 sollya_obj_t, sollya_obj_t)

Usage:

supnorm(p, f, I, errorType, accuracy) : (function, function, range, absolute|relative, constant) -> range

Parameters:

Description:

Example 1:

   > p = remez(exp(x), 5, [-1;1]);
   > midpointmode=on!;
   > supnorm(p, exp(x), [-1;1], absolute, 2^(-40));
   0.45205513967~0/2~e-4

Example 2:

   > prec=200!;
   > midpointmode=on!;
   > d = [1;2];
   > f = exp(cos(x)^2 + 1);
   > p = remez(1,15,d,1/f,1e-40);
   > theta=1b-60;
   > prec=default!;
   > mode=relative;
   > supnorm(p,f,d,mode,theta);
   0.30893006200251428~5/6~e-13

Example 3:

   > midpointmode=on!;
   > mode=relative;
   > theta=1b-135;
   > d = [-1b-2;1b-2];
   > f = expm1(x);
   > p = x * (1 +  x * ( 2097145 * 2^(-22) + x * ( 349527 * 2^(-21) + x * (87609 * 2^(-21) + x * 4369 * 2^(-19)))));
   > theta=1b-40;
   > supnorm(p,f,d,mode,theta);
   0.98349131972~2/3~e-7
See also: dirtyinfnorm, infnorm, checkinfnorm, absolute, relative, taylorform, autodiff, numberroots, diam
Go back to the list of commands

Name:

suppressmessage suppresses the displaying of messages with a certain number

Library name:

void sollya_lib_suppressmessage(sollya_obj_t, ...);

Usage:

suppressmessage(msg num 1, ..., msg num n) : (integer, ..., integer) -> void suppressmessage(msg list) : list -> void

Parameters:

Description:

Example 1:

   > verbosity = 1;
   The verbosity level has been set to 1.
   > 0.1;
   Warning: Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   0.1
   > suppressmessage(174);
   > 0.1;
   0.1
   > suppressmessage(407);
   > 0.1;
   0.1
   > verbosity = 12;
   The verbosity level has been set to 12.
   > showmessagenumbers = on;
   Displaying of message numbers has been activated.
   > diff(exp(x * 0.1));
   Information (196): formally differentiating a function.
   Information (197): differentiating the expression 'exp(x * 0.1)'
   Information (204): extraction of coefficient terms from a polynomial uses a special algorithm for Horner forms.
   Information (207): no Horner simplification will be performed because the given tree is already in Horner form.
   exp(x * 0.1) * 0.1
   > suppressmessage(207, 196);
   > diff(exp(x * 0.1));
   Information (197): differentiating the expression 'exp(x * 0.1)'
   Information (204): extraction of coefficient terms from a polynomial uses a special algorithm for Horner forms.
   exp(x * 0.1) * 0.1
   > unsuppressmessage(174);
   > 0.1;
   Warning (174): Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   0.1

Example 2:

   > verbosity = 12;
   The verbosity level has been set to 12.
   > showmessagenumbers = on;
   Displaying of message numbers has been activated.
   > diff(exp(x * 0.1));
   Warning (174): Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   Information (196): formally differentiating a function.
   Information (197): differentiating the expression 'exp(x * 0.1)'
   Information (204): extraction of coefficient terms from a polynomial uses a special algorithm for Horner forms.
   Information (207): no Horner simplification will be performed because the given tree is already in Horner form.
   exp(x * 0.1) * 0.1
   > suppressmessage([| 174, 207, 196 |]);
   > diff(exp(x * 0.1));
   Information (197): differentiating the expression 'exp(x * 0.1)'
   Information (204): extraction of coefficient terms from a polynomial uses a special algorithm for Horner forms.
   exp(x * 0.1) * 0.1
See also: getsuppressedmessages, suppressmessage, unsuppressmessage, verbosity, roundingwarnings
Go back to the list of commands

Name:

sup gives the upper bound of an interval.

Library name:

sollya_obj_t sollya_lib_sup(sollya_obj_t)

Usage:

sup(I) : range -> constant sup(x) : constant -> constant

Parameters:

Description:

Example 1:

   > sup([1;3]);
   3
   > sup(5);
   5

Example 2:

   > display=binary!;
   > I=[0; 0.111110000011111_2];
   > sup(I);
   1.11110000011111_2 * 2^(-1)
   > prec=12!;
   > sup(I);
   1.11110000011111_2 * 2^(-1)
See also: inf, mid, max, min
Go back to the list of commands

Name:

tail gives the tail of a list.

Library name:

sollya_obj_t sollya_lib_tail(sollya_obj_t)

Usage:

tail(L) : list -> list

Parameters:

Description:

Example 1:

   > tail([|1,2,3|]);
   [|2, 3|]
   > tail([|1,2...|]);
   [|2...|]
See also: head
Go back to the list of commands

Name:

tanh the hyperbolic tangent function.

Library names:

sollya_obj_t sollya_lib_tanh(sollya_obj_t) sollya_obj_t sollya_lib_build_function_tanh(sollya_obj_t) #define SOLLYA_TANH(x) sollya_lib_build_function_tanh(x)

Description:

See also: atanh, cosh, sinh
Go back to the list of commands

Name:

tan the tangent function.

Library names:

sollya_obj_t sollya_lib_tan(sollya_obj_t) sollya_obj_t sollya_lib_build_function_tan(sollya_obj_t) #define SOLLYA_TAN(x) sollya_lib_build_function_tan(x)

Description:

See also: atan, cos, sin
Go back to the list of commands

Name:

taylorform computes a rigorous polynomial approximation (polynomial, interval error bound) for a function, based on Taylor expansions.

Library names:

sollya_obj_t sollya_lib_taylorform(sollya_obj_t, sollya_obj_t,                                    sollya_obj_t, ...) sollya_obj_t sollya_lib_v_taylorform(sollya_obj_t, sollya_obj_t,                                      sollya_obj_t, va_list)

Usage:

taylorform(f, n, x0, I, errorType) : (function, integer, constant, range, absolute|relative) -> list taylorform(f, n, x0, I, errorType) : (function, integer, range, range, absolute|relative) -> list taylorform(f, n, x0, errorType) : (function, integer, constant, absolute|relative) -> list taylorform(f, n, x0, errorType) : (function, integer, range, absolute|relative) -> list

Parameters:

Description:

Example 1:

   > TL=taylorform(sin(x)/x, 10, 0, [-1,1], relative);
   > p=TL[0];
   > Delta=TL[2];
   > errors=TL[1];
   > for epsi in errors do epsi;
   [0;0]
   [0;0]
   [0;5.3455294201843912922810729343029637576303937602101e-51]
   [0;0]
   [-3.3409558876152445576756705839393523485189961001313e-52;3.3409558876152445576756705839393523485189961001313e-52]
   [0;0]
   [-1.04404871487976392427364705748104760891218628129103e-53;1.04404871487976392427364705748104760891218628129103e-53]
   [0;0]
   [-1.63132611699963113167757352731413688892529106451724e-55;1.63132611699963113167757352731413688892529106451724e-55]
   [0;0]
   [-1.91171029335894273243465647732125416670932546623114e-57;1.91171029335894273243465647732125416670932546623114e-57]
   > p; Delta;
   1 + x^2 * (-0.16666666666666666666666666666666666666666666666667 + x^2 * (8.3333333333333333333333333333333333333333333333333e-3 + x^2 * (-1.98412698412698412698412698412698412698412698412698e-4 + x^2 * (2.75573192239858906525573192239858906525573192239859e-6 + x^2 * (-2.50521083854417187750521083854417187750521083854419e-8)))))
   [-1.6135797443886066084999806203254010793747502812764e-10;1.6135797443886066084999806203254010793747502812764e-10]

Example 2:

   > TL=taylorform(exp(x), 10, 0, [-1,1], absolute);
   > p=TL[0];
   > Delta=TL[2];
   > p; Delta;
   1 + x * (1 + x * (0.5 + x * (0.16666666666666666666666666666666666666666666666667 + x * (4.1666666666666666666666666666666666666666666666667e-2 + x * (8.3333333333333333333333333333333333333333333333333e-3 + x * (1.38888888888888888888888888888888888888888888888889e-3 + x * (1.98412698412698412698412698412698412698412698412698e-4 + x * (2.4801587301587301587301587301587301587301587301587e-5 + x * (2.75573192239858906525573192239858906525573192239859e-6 + x * 2.7557319223985890652557319223985890652557319223986e-7)))))))))
   [-2.31142719641187619441242534182684745832539555102969e-8;2.7312660755642474420206278018039434042553645532164e-8]

Example 3:

   > TL1 = taylorform(exp(x), 10, log2(10), [-1,1], absolute);
   > TL2 = taylorform(exp(x), 10, [log2(10)], [-1,1], absolute);
   > TL1==TL2;
   false

Example 4:

   > TL1 = taylorform(exp(x), 3, 0, [0,1], relative);
   > TL2 = taylorform(exp(x), 3, 0, relative);
   > TL1[0]==TL2[0];
   true
   > TL1[1]==TL2[1];
   true
   > length(TL1);
   3
   > length(TL2);
   2

Example 5:

   > f = exp(cos(x)); x0 = 0;
   > TL = taylorform(f, 3, x0);
   > T1 = TL[0];
   > T2 = taylor(f, 3, x0);
   > print(coeff(T1, 2));
   -1.35914091422952261768014373567633124887862354684999
   > print(coeff(T2, 2));
   0.5 * exp(1)
See also: diff, autodiff, taylor, remez, chebyshevform
Go back to the list of commands

Name:

taylorrecursions controls the number of recursion steps when applying Taylor's rule.

Library names:

void sollya_lib_set_taylorrecursions_and_print(sollya_obj_t) void sollya_lib_set_taylorrecursions(sollya_obj_t) sollya_obj_t sollya_lib_get_taylorrecursions()

Usage:

taylorrecursions = n : integer -> void taylorrecursions = n ! : integer -> void taylorrecursions : integer

Parameters:

Description:

Example 1:

   > f=exp(x);
   > p=remez(f,3,[0;1]);
   > taylorrecursions=0;
   The number of recursions for Taylor evaluation has been set to 0.
   > evaluate(f-p, [0;1]);
   [-0.46839364816268368775174657814112460243249079671039;0.46947781754646820647293019728402934746974652584671]
   > taylorrecursions=1;
   The number of recursions for Taylor evaluation has been set to 1.
   > evaluate(f-p, [0;1]);
   [-0.138131114954063839905475752120786856031651747712954;0.13921528433784835862665937126369160106890747684927]
See also: hopitalrecursions, evaluate, infnorm
Go back to the list of commands

Name:

taylor computes a Taylor expansion of a function in a point

Library name:

sollya_obj_t sollya_lib_taylor(sollya_obj_t, sollya_obj_t, sollya_obj_t)

Usage:

taylor(function, degree, point) : (function, integer, constant) -> function

Parameters:

Description:

Example 1:

   > print(taylor(exp(x),3,1));
   exp(1) + x * (exp(1) + x * (0.5 * exp(1) + x * exp(1) / 6))

Example 2:

   > print(taylor(asin(x),7,0));
   x * (1 + x^2 * (1 / 6 + x^2 * (9 / 120 + x^2 * 225 / 5040)))

Example 3:

   > print(taylor(erf(x),6,0));
   x * (1 / sqrt((pi) / 4) + x^2 * ((sqrt((pi) / 4) * 4 / (pi) * (-2)) / 6 + x^2 * (sqrt((pi) / 4) * 4 / (pi) * 12) / 120))
See also: remez, fpminimax, taylorform
Go back to the list of commands

Name:

TD short form for tripledouble
See also: tripledouble
Go back to the list of commands

Name:

time procedure for timing Sollya code.

Usage:

time(code) : code -> constant

Parameters:

Description:

Example 1:

   > t = time(p=remez(sin(x),10,[-1;1]));
   > write(t,"s were spent computing p = ",p,"\n");
   0.20540799999999999998160499226074193757085595279932s were spent computing p = 9.0486898749977990986908851357759191711354777014602e-17 * x^10 + 2.68762595115123596299959320959141640012683406736586e-6 * x^9 + -2.4247978492521313349073232289246205727856268698001e-16 * x^8 + -1.98344863020965929701245606503586461226130937598776e-4 * x^7 + 2.2748214757753544349162426281857910162575492126267e-16 * x^6 + 8.3333037186560980567697821420813799547276481409702e-3 * x^5 + -8.5747151989720669741706961303549531312110511218869e-17 * x^4 + -0.166666661386013237076216566493953847771564552744173 * x^3 + 1.05699558969863875841493332282097022580493449058156e-17 * x^2 + 0.99999999973628365676559825181776417246038944720794 * x + (-3.12065309566018830243163208536426045628106466008778e-19)

Example 2:

   > write(time({ p=remez(sin(x),10,[-1;1]); write("The error is 2^(", log2(dirtyinfnorm(p-sin(x),[-1;1])), ")\n"); }), " s were spent\n");
   The error is 2^(log2(2.39601979446524486606649528289933482070294808074097e-11))
   0.365319999999999999980640486008098832826362922787666 s were spent

Example 3:

   > t = time(bashexecute("sleep 10"));
   > write(~(t-10),"s of execution overhead.\n");
   2.55700000000000024491519923230953281745314598083496e-3s of execution overhead.

Example 4:

   > ratio := time(p=remez(sin(x),10,[-1;1]))/time(nop(10));
   > write("This ratio = ", ratio, " should somehow be independent of the type of machine.\n");
   This ratio = 6.3994871190237575916437141927829786123929167439112 should somehow be independent of the type of machine.
See also: timing, nop
Go back to the list of commands

Name:

timing global variable controlling timing measures in Sollya.

Library names:

void sollya_lib_set_timing_and_print(sollya_obj_t) void sollya_lib_set_timing(sollya_obj_t) sollya_obj_t sollya_lib_get_timing()

Usage:

timing = activation value : on|off -> void timing = activation value ! : on|off -> void timing : on|off

Parameters:

Description:

Example 1:

   > verbosity=1!;
   > timing=on;
   Timing has been activated.
   > p=remez(sin(x),10,[-1;1]);
   Information: Remez: computing the matrix spent 2 ms
   Information: Remez: computing the quality of approximation spent 12 ms
   Information: Remez: computing the matrix spent 1 ms
   Information: Remez: computing the quality of approximation spent 10 ms
   Information: Remez: computing the matrix spent 1 ms
   Information: Remez: computing the quality of approximation spent 10 ms
   Information: computing a minimax approximation spent 181 ms
   Information: assignment spent 193 ms
   Information: full execution of the last parse chunk spent 207 ms
See also: on, off, time
Go back to the list of commands

Names:

tripledouble, TD represents a number as the sum of three IEEE doubles.

Library names:

sollya_obj_t sollya_lib_triple_double(sollya_obj_t) sollya_obj_t sollya_lib_triple_double_obj() int sollya_lib_is_triple_double_obj(sollya_obj_t) sollya_obj_t sollya_lib_build_function_triple_double(sollya_obj_t) #define SOLLYA_TD(x) sollya_lib_build_function_triple_double(x)

Description:

Example 1:

   > verbosity=1!;
   > a = 1+ 2^(-55)+2^(-115);
   > TD(a);
   1.00000000000000002775557561562891353466491600711096
   > prec=110!;
   > TD(a);
   1.00000000000000002775557561562891353
See also: halfprecision, single, double, doubleextended, doubledouble, quad, roundcoefficients, implementpoly, fpminimax, printexpansion
Go back to the list of commands

Name:

true the boolean value representing the truth.

Library names:

sollya_obj_t sollya_lib_true() int sollya_lib_is_true(sollya_obj_t)

Description:

Example 1:

   > true && false;
   false
   > 2>1;
   true
See also: false, &&, ||
Go back to the list of commands

Name:

unsuppressmessage unsuppresses the displaying of messages with a certain number

Library name:

void sollya_lib_unsuppressmessage(sollya_obj_t, ...);

Usage:

unsuppressmessage(msg num 1, ..., msg num n) : (integer, ..., integer) -> void unsuppressmessage(msg list) : list -> void

Parameters:

Description:

Example 1:

   > verbosity = 1;
   The verbosity level has been set to 1.
   > 0.1;
   Warning: Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   0.1
   > suppressmessage(174);
   > 0.1;
   0.1
   > suppressmessage(174);
   > 0.1;
   0.1

Example 2:

   > verbosity = 12;
   The verbosity level has been set to 12.
   > showmessagenumbers = on;
   Displaying of message numbers has been activated.
   > diff(exp(x * 0.1));
   Warning (174): Rounding occurred when converting the constant "0.1" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   Information (196): formally differentiating a function.
   Information (197): differentiating the expression 'exp(x * 0.1)'
   Information (204): extraction of coefficient terms from a polynomial uses a special algorithm for Horner forms.
   Information (207): no Horner simplification will be performed because the given tree is already in Horner form.
   exp(x * 0.1) * 0.1
   > suppressmessage([| 174, 207, 196 |]);
   > diff(exp(x * 0.1));
   Information (197): differentiating the expression 'exp(x * 0.1)'
   Information (204): extraction of coefficient terms from a polynomial uses a special algorithm for Horner forms.
   exp(x * 0.1) * 0.1
   > unsuppressmessage([| 174, 196 |]);

Example 3:

   > verbosity = 12;
   The verbosity level has been set to 12.
   > showmessagenumbers = on;
   Displaying of message numbers has been activated.
   > suppressmessage(207, 387, 390, 388, 391, 196, 195, 197, 205);
   > getsuppressedmessages();
   [|195, 196, 197, 205, 207, 387, 388, 390, 391|]
   > evaluate(x/sin(x) - 1, [-1;1]);
   [0;0.85081571768092561791175324139865019347039665509409]
   > unsuppressmessage(getsuppressedmessages());
   > getsuppressedmessages();
   [| |]
See also: getsuppressedmessages, suppressmessage, unsuppressmessage, verbosity, roundingwarnings
Go back to the list of commands

Name:

var declaration of a local variable in a scope

Usage:

var identifier1, identifier2,... , identifiern : void

Parameters:

Description:

Example 1:

   > exp(x);
   exp(x)
   > a = 3;
   > {var a, b; a=5; b=3; {var a; var b; b = true; a = 1; a; b;}; a; b; };
   1
   true
   5
   3
   > a;
   3
See also: error, proc
Go back to the list of commands

Name:

verbosity global variable controlling the amount of information displayed by commands.

Library names:

void sollya_lib_set_verbosity_and_print(sollya_obj_t) void sollya_lib_set_verbosity(sollya_obj_t) sollya_obj_t sollya_lib_get_verbosity()

Usage:

verbosity = n : integer -> void verbosity = n ! : integer -> void verbosity : integer

Parameters:

Description:

Example 1:

   > verbosity=0!;
   > 1.2+"toto";
   error
   > verbosity=1!;
   > 1.2+"toto";
   Warning: Rounding occurred when converting the constant "1.2" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
   error
   > verbosity=2!;
   > 1.2+"toto";
   Warning: Rounding occurred when converting the constant "1.2" to floating-point with 165 bits.
   If safe computation is needed, try to increase the precision.
   Warning: at least one of the given expressions or a subexpression is not correctly typed
   or its evaluation has failed because of some error on a side-effect.
   Information: the expression or a partial evaluation of it has been the following:
   (1.19999999999999999999999999999999999999999999999999) + ("toto")
   error
See also: roundingwarnings, suppressmessage, unsuppressmessage, showmessagenumbers, getsuppressedmessages
Go back to the list of commands

Name:

void the functional result of a side-effect or empty argument resp. the corresponding type

Library names:

sollya_obj_t sollya_lib_void() int sollya_lib_is_void(sollya_obj_t)

Usage:

void : void | type type

Description:

Example 1:

   > print(void);
   void
   > void;

Example 2:

   > hey = proc() { print("Hello world."); };
   > hey;
   proc()
   {
   print("Hello world.");
   return void;
   }
   > hey();
   Hello world.
   > hey(void);
   Hello world.
   > print(hey());
   Hello world.
   void

Example 3:

   > bashexecute("gcc -fPIC -Wall -c externalprocvoidexample.c");
   > bashexecute("gcc -fPIC -shared -o externalprocvoidexample externalprocvoidexample.o");
   > externalproc(foo, "./externalprocvoidexample", void -> void);
   > foo;
   foo(void) -> void
   > foo();
   Hello from the external world.
   > foo(void);
   Hello from the external world.
   > print(foo());
   Hello from the external world.
   void

Example 4:

   > procedure blub(L = ...) { print("Argument list:", L); };
   > blub(1);
   Argument list: [|1|]
   > blub();
   Argument list: [| |]
   > blub(void);
   Argument list: [|void|]
See also: error, proc, externalproc
Go back to the list of commands

Name:

worstcase searches for hard-to-round cases of a function

Library names:

void sollya_lib_worstcase(sollya_obj_t, sollya_obj_t, sollya_obj_t,                           sollya_obj_t, sollya_obj_t, ...) void sollya_lib_v_worstcase(sollya_obj_t, sollya_obj_t, sollya_obj_t,                             sollya_obj_t, sollya_obj_t, va_list)

Usage:

worstcase(function, preimage precision, preimage exponent range, image precision, error bound) : (function, integer, range, integer, constant) -> void worstcase(function, preimage precision, preimage exponent range, image precision, error bound, filename) : (function, integer, range, integer, constant, string) -> void

Parameters:

Description:

Example 1:

   > worstcase(exp(x),24,[1,2],24,1b-26);
   prec = 165
   x = 1.99999988079071044921875 f(x) = 7.3890552520751953125 eps = 4.5998601423446695596184695493764120138001954979037e-9 = 2^(-27.695763)
   x = 2 f(x) = 7.38905620574951171875 eps = 1.44563608749673018122228379395533417878125150587072e-8 = 2^(-26.043720)
   
See also: round, searchgal, evaluate
Go back to the list of commands

Name:

write prints an expression without separators

Usage:

write(expr1,...,exprn) : (any type,..., any type) -> void write(expr1,...,exprn) > filename : (any type,..., any type, string) -> void write(expr1,...,exprn) >> filename : (any type,...,any type, string) -> void

Parameters:

Description:

Example 1:

   > write(x + 2 + exp(sin(x)));
   > write("Hello\n");
   x + 2 + exp(sin(x))Hello
   > write("Hello","world\n");
   Helloworld
   > write("Hello","you", 4 + 3, "other persons.\n");
   Helloyou7other persons.

Example 2:

   > write("Hello","\n");
   Hello
   > write([|"Hello"|],"\n");
   [|"Hello"|]
   > s = "Hello";
   > write(s,[|s|],"\n");
   Hello[|"Hello"|]
   > t = "Hello\tyou";
   > write(t,[|t|],"\n");
   Hello you[|"Hello\tyou"|]

Example 3:

   > write(x + 2 + exp(sin(x))) > "foo.sol";
   > readfile("foo.sol");
   x + 2 + exp(sin(x))

Example 4:

   > write(x + 2 + exp(sin(x))) >> "foo.sol";
See also: print, printexpansion, printdouble, printsingle, printxml, readfile, autosimplify, display, midpointmode, fullparentheses, evaluate, roundingwarnings, autosimplify
Go back to the list of commands