1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
##
## Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
## Copyright (C) 2006-2008 - INRIA - Bruno JOFRET
##
## This file must be used under the terms of the CeCILL.
## This source file is licensed as described in the file COPYING, which
## you should have received as part of this distribution. The terms
## are also available at
## http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
##
##
Feel free to add everything you find useful for hArtes and the scilab2c tool.
/*
** Type definition
*/
We define types that way (but it can evolve in the future) :
I - Scalar
-----------
I.1 - Real
I.1.1 - Simple precision (float)
I.1.2 - Double precision (double)
I.2 - Complex
I.2.1 - Simple precision (float)
I.2.2 - Double precision (double)
I.3 - Integer (NOT IMPLEMENTED YET)
I.4 - Boolean (NOT IMPLEMENTED YET)
II - Matrix
------------
!! WARNING !!
Matrix are stored column ways.
Ex :
double M[4] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0}
- If M has 2 lines and 3 columns :
M = [ 1.0 3.0 5.0 ]
[ 2.0 4.0 6.0 ]
- If M has 3 lines and 2 columns :
M = [ 1.0 4.0 ]
[ 2.0 5.0 ]
[ 3.0 6.0 ]
I.1 - Real
I.1.1 - Simple precision (float)
I.1.2 - Double precision (double)
I.2 - Complex
I.2.1 - Simple precision (float)
I.2.2 - Double precision (double)
I.3 - Integer (NOT IMPLEMENTED YET)
I.4 - Boolean (NOT IMPLEMENTED YET)
/*
** Functions Naming style
*/
We define this coding style for functions names :
<precision><function_name><variable_type>.
variable_type :
- 's' : Scalar
- 'a' : Matrix
precision :
- 's' : Real simple precision (float)
- 'd' : Real double precision (double)
- 'c' : Complex simple precision (float)
- 'z' : Complex double precision (double)
/*
** Transtyping functions
** FIXME : Add it into the users limitations.
*/
- acos(x) : Real input.
Return a Real value if x E [ -1 ; 1 ].
Return a Complex value if x E ] -inf ; -1 [ U ] 1 ; +inf [.
- acosh(x) : Real input.
Return a Real value if x E ] 1 ; +inf [.
Return a Complex value if x E ] -inf ; 1 ].
- asin(x) : Real input.
Return a Real value if x E [ -1 ; 1 ].
Return a Complex value if x E ] -inf ; -1 [ U ] 1 ; +inf [.
- atanh(x) : Real input.
Return a Real value if x E ] -1 ; 1[.
Return a Complex value if x E ] -inf ; -1 [ U ] 1 ; +inf [.
- log(x) : Real input.
Return a Real value if x E ] 0 ; +inf [
Return a Complex value if x E ] -inf ; 0 [
- log10(x) : Real input.
Return a Real value if x E ] 0 ; +inf [
Return a Complex value if x E ] -inf ; 0 [
- spec(A) : Real input.
Return a Real value if A symmetric and for some other cases (to complete)
Return a Complex value otherelse
- spec2(A) : Real input.
Return Reals value if A symmetric and for some other cases (to complete)
Return Complexes value otherelse
- logm(A) : Real input.
Return either a Real value or a Complex value : don't know the conditions to have one
- powm(A) : Real input.
Return either a Real value or a Complex value : don't know the conditions to have one
- chol(A) : Complex input
The diagonal must be real;
-max(a,b) : Real input only
-min(a,b) : Real input only
Following fuctions must have their 2 input matrix with the same dimension(row1=row2 and column1=column2)
-operation element by element : add, diff, rdiv, ldiv, mul
-comparaison operators : LogEq, LogNe, LogGt, LogGe, LogLt, LogLe
-pow
Following fuctions must have a square matrix on input
-logm
-powm
-determ
-chol
-trace
-lpc2cep (because using logm)
-spec
-spec2
-inv
-Careful about the functions ceil, floor, fix/int, round with float precision. Exemple :
floor(1,999999)=2 instead of 1 in Scilab
floor(1.99999)=1 egal to Scilab result
|