Name: CyclicValue - project a cyclic value onto it's norm interval (e.g. angle on [0,360))

Synopsis:

value [b1 b2] CyclicValue -&gt; normvalue 
value  b1 b2  CyclicValue -&gt; normvalue 
See below for the meaning of b1, b2!


Examples:

%% project angle in degrees onto [0,360): 
-3601 [0 360] CyclicValue -&gt; 359.0 
%% project angle in radians onto [-pi,pi): 
23.0 [Pi -1 mul  Pi] CyclicValue -&gt; -2.13274 
%% this demonstrates the handling of open/closed interval ends: 
%%   project number onto [1,4): 
1 [1 4] CyclicValue -&gt; 1 
2 [1 4] CyclicValue -&gt; 2 
3 [1 4] CyclicValue -&gt; 3 
4 [1 4] CyclicValue -&gt; 1 
%%   project number onto (1,4]: 
1 [4 1] CyclicValue -&gt; 4 
2 [4 1] CyclicValue -&gt; 2 
3 [4 1] CyclicValue -&gt; 3 
4 [4 1] CyclicValue -&gt; 4


Description:

For a given value and a given norm interval, "CyclicValue" returns 
the value's norm equivalent. This is useful for all values with a 
cyclic definition, such as angles. 
The output is always of type double, regardless of the input type. 
Alternatives: Function CyclicValue_d_d_d if you use it with three doubles 
(interval = double1 - double2), CyclicValue_d_a if you use it with 
double and array (both undocumented) -&gt; behaviour and synopsis are the same.


Parameters:

In :  value:   value in (-oo, oo) 
b1, b2:  norm interval. 
This interval is half-open: [.), or (.], depending on 
the following rules: 
b1 must not equal b2. 
b1 always denotes the closed end of the interval. 
b2 always denotes the open   end of the interval. 
If b1&lt;b2, the norm interval used is [b1,b2). 
If b1&gt;b2, the norm interval used is (b2,b1]. 
See below for examples. 
Out:  The value's norm equivalent in the interval [b1, b2). 
The output is always of type double, regardless of the input 
type.


Diagnostics:

b1 must not equal b2. This is not checked for efficency reasons! 
If b1=b2, code will break with /DivisionByZero during execution.


Remarks:

Variant *_d_d_d is fastest. Prefer this variant over *_d_a in time 
critical applications. 
Inspired by IDL/NASE commandfunction cyclic_value().


Author:

Ruediger Kupper


FirstVersion:

13.3.2003


SeeAlso:

mod
floor

Source:

/var/www/debian/nest/nest-simulator-2.20.0/lib/sli/misc_helpers.sli
