bug 12449: QUANT_f quantization methods were not behaving properly. Clarified documen...
[scilab.git] / scilab / modules / scicos_blocks / src / fortran / qzcel.f
1 c     Scicos
2 c     
3 c     Copyright (C) INRIA - METALAU Project <scicos@inria.fr>
4 c     
5 c     This program is free software; you can redistribute it and/or modify
6 c     it under the terms of the GNU General Public License as published by
7 c     the Free Software Foundation; either version 2 of the License, or
8 c     (at your option) any later version.
9 c     
10 c     This program is distributed in the hope that it will be useful,
11 c     but WITHOUT ANY WARRANTY; without even the implied warranty of
12 c     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 c     GNU General Public License for more details.
14 c     
15 c     You should have received a copy of the GNU General Public License
16 c     along with this program; if not, write to the Free Software
17 c     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 c     
19 c     See the file ./license.txt
20 c     
21
22       subroutine qzcel(flag,nevprt,t,xd,x,nx,z,nz,tvec,ntvec,
23      &     rpar,nrpar,ipar,nipar,u,nu,y,ny)
24 c     Copyright INRIA
25
26 c     Scicos block simulator
27 c
28 c     Gives quantized signal by ceiling method
29 c     rpar(i) quantization step used for i input
30 c
31       double precision t,xd(*),x(*),z(*),tvec(*),rpar(*),u(*),y(*)
32       integer flag,nevprt,nx,nz,ntvec,nrpar,ipar(*)
33       integer nipar,nu,ny
34       double precision flr
35
36
37       integer i
38 c     Quantization by taking the nearest whole number of quantized steps
39 c     towards infinity (ceiling)
40       do 15 i=1,nu
41          flr=AINT(u(i)/rpar(i))
42          if (u(i).lt.0.0d0)then
43             y(i)=rpar(i)*flr
44          else
45             if (u(i).eq.flr)then
46                y(i)=rpar(i)*flr
47             else
48                y(i)=rpar(i)*(flr+1.0d0)
49             endif
50          endif
51  15   continue
52       return
53
54       end