1 /* TA-LIB Copyright (c) 1999-2007, Mario Fortier
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or
5  * without modification, are permitted provided that the following
6  * conditions are met:
7  *
8  * - Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  *
11  * - Redistributions in binary form must reproduce the above copyright
12  *   notice, this list of conditions and the following disclaimer in
13  *   the documentation and/or other materials provided with the
14  *   distribution.
15  *
16  * - Neither name of author nor the names of its contributors
17  *   may be used to endorse or promote products derived from this
18  *   software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
30  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
31  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 /* List of contributors:
35  *
36  *  Initial  Name/description
37  *  -------------------------------------------------------------------
38  *  MF       Mario Fortier
39  *  JV       Jesus Viver <324122@cienz.unizar.es>
40  *
41  * Change history:
42  *
43  *  MMDDYY BY   Description
44  *  -------------------------------------------------------------------
45  *  112400 MF   Template creation.
46  *  100502 JV   Speed optimization of the algorithm
47  *  052603 MF   Adapt code to compile with .NET Managed C++
48  *  090404 MF   Fix #978056. Trap sqrt with negative zero values.
49  */
50 
51 /**** START GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/
52 /* All code within this section is automatically
53  * generated by gen_code. Any modification will be lost
54  * next time gen_code is run.
55  */
56 /* Generated */
57 /* Generated */ #if defined( _MANAGED )
58 /* Generated */    #include "TA-Lib-Core.h"
59 /* Generated */    #define TA_INTERNAL_ERROR(Id) (RetCode::InternalError)
60 /* Generated */    namespace TicTacTec { namespace TA { namespace Library {
61 /* Generated */ #elif defined( _JAVA )
62 /* Generated */    #include "ta_defs.h"
63 /* Generated */    #include "ta_java_defs.h"
64 /* Generated */    #define TA_INTERNAL_ERROR(Id) (RetCode.InternalError)
65 /* Generated */ #else
66 /* Generated */    #include <string.h>
67 /* Generated */    #include <math.h>
68 /* Generated */    #include "ta_func.h"
69 /* Generated */ #endif
70 /* Generated */
71 /* Generated */ #ifndef TA_UTILITY_H
72 /* Generated */    #include "ta_utility.h"
73 /* Generated */ #endif
74 /* Generated */
75 /* Generated */ #ifndef TA_MEMORY_H
76 /* Generated */    #include "ta_memory.h"
77 /* Generated */ #endif
78 /* Generated */
79 /* Generated */ #define TA_PREFIX(x) TA_##x
80 /* Generated */ #define INPUT_TYPE   double
81 /* Generated */
82 /* Generated */ #if defined( _MANAGED )
StdDevLookback(int optInTimePeriod,double optInNbDev)83 /* Generated */ int Core::StdDevLookback( int           optInTimePeriod, /* From 2 to 100000 */
84 /* Generated */                         double        optInNbDev )  /* From TA_REAL_MIN to TA_REAL_MAX */
85 /* Generated */
86 /* Generated */ #elif defined( _JAVA )
87 /* Generated */ public int stdDevLookback( int           optInTimePeriod, /* From 2 to 100000 */
88 /* Generated */                          double        optInNbDev )  /* From TA_REAL_MIN to TA_REAL_MAX */
89 /* Generated */
90 /* Generated */ #else
91 /* Generated */ int TA_STDDEV_Lookback( int           optInTimePeriod, /* From 2 to 100000 */
92 /* Generated */                       double        optInNbDev )  /* From TA_REAL_MIN to TA_REAL_MAX */
93 /* Generated */
94 /* Generated */ #endif
95 /**** END GENCODE SECTION 1 - DO NOT DELETE THIS LINE ****/
96 {
97    /* insert local variable here */
98 
99 /**** START GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/
100 /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK
101 /* Generated */    /* min/max are checked for optInTimePeriod. */
102 /* Generated */    if( (int)optInTimePeriod == TA_INTEGER_DEFAULT )
103 /* Generated */       optInTimePeriod = 5;
104 /* Generated */    else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) )
105 /* Generated */       return -1;
106 /* Generated */
107 /* Generated */    if( optInNbDev == TA_REAL_DEFAULT )
108 /* Generated */       optInNbDev = 1.000000e+0;
109 /* Generated */    else if( (optInNbDev < -3.000000e+37) ||/* Generated */  (optInNbDev > 3.000000e+37) )
110 /* Generated */       return -1;
111 /* Generated */
112 /* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */
113 /**** END GENCODE SECTION 2 - DO NOT DELETE THIS LINE ****/
114 
115    /* insert lookback code here. */
116 
117    /* Lookback is driven by the variance. */
118    return LOOKBACK_CALL(VAR)( optInTimePeriod, optInNbDev );
119 }
120 
121 /**** START GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/
122 /*
123  * TA_STDDEV - Standard Deviation
124  *
125  * Input  = double
126  * Output = double
127  *
128  * Optional Parameters
129  * -------------------
130  * optInTimePeriod:(From 2 to 100000)
131  *    Number of period
132  *
133  * optInNbDev:(From TA_REAL_MIN to TA_REAL_MAX)
134  *    Nb of deviations
135  *
136  *
137  */
138 /* Generated */
139 /* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY )
140 /* Generated */ enum class Core::RetCode Core::StdDev( int    startIdx,
141 /* Generated */                                        int    endIdx,
142 /* Generated */                                        SubArray^    inReal,
143 /* Generated */                                        int           optInTimePeriod, /* From 2 to 100000 */
144 /* Generated */                                        double        optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */
145 /* Generated */                                        [Out]int%    outBegIdx,
146 /* Generated */                                        [Out]int%    outNBElement,
147 /* Generated */                                        cli::array<double>^  outReal )
148 /* Generated */ #elif defined( _MANAGED )
149 /* Generated */ enum class Core::RetCode Core::StdDev( int    startIdx,
150 /* Generated */                                        int    endIdx,
151 /* Generated */                                        cli::array<double>^ inReal,
152 /* Generated */                                        int           optInTimePeriod, /* From 2 to 100000 */
153 /* Generated */                                        double        optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */
154 /* Generated */                                        [Out]int%    outBegIdx,
155 /* Generated */                                        [Out]int%    outNBElement,
156 /* Generated */                                        cli::array<double>^  outReal )
157 /* Generated */ #elif defined( _JAVA )
158 /* Generated */ public RetCode stdDev( int    startIdx,
159 /* Generated */                        int    endIdx,
160 /* Generated */                        double       inReal[],
161 /* Generated */                        int           optInTimePeriod, /* From 2 to 100000 */
162 /* Generated */                        double        optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */
163 /* Generated */                        MInteger     outBegIdx,
164 /* Generated */                        MInteger     outNBElement,
165 /* Generated */                        double        outReal[] )
166 /* Generated */ #else
167 /* Generated */ TA_RetCode TA_STDDEV( int    startIdx,
168 /* Generated */                       int    endIdx,
169 /* Generated */                       const double inReal[],
170 /* Generated */                       int           optInTimePeriod, /* From 2 to 100000 */
171 /* Generated */                       double        optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */
172 /* Generated */                       int          *outBegIdx,
173 /* Generated */                       int          *outNBElement,
174 /* Generated */                       double        outReal[] )
175 /* Generated */ #endif
176 /**** END GENCODE SECTION 3 - DO NOT DELETE THIS LINE ****/
177 {
178    /* Insert local variables here. */
179    int i;
180    ENUM_DECLARATION(RetCode) retCode;
181    double tempReal;
182 
183 /**** START GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/
184 /* Generated */
185 /* Generated */ #ifndef TA_FUNC_NO_RANGE_CHECK
186 /* Generated */
187 /* Generated */    /* Validate the requested output range. */
188 /* Generated */    if( startIdx < 0 )
189 /* Generated */       return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex);
190 /* Generated */    if( (endIdx < 0) || (endIdx < startIdx))
191 /* Generated */       return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex);
192 /* Generated */
193 /* Generated */    #if !defined(_JAVA)
194 /* Generated */    if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
195 /* Generated */    #endif /* !defined(_JAVA)*/
196 /* Generated */    /* min/max are checked for optInTimePeriod. */
197 /* Generated */    if( (int)optInTimePeriod == TA_INTEGER_DEFAULT )
198 /* Generated */       optInTimePeriod = 5;
199 /* Generated */    else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) )
200 /* Generated */       return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
201 /* Generated */
202 /* Generated */    if( optInNbDev == TA_REAL_DEFAULT )
203 /* Generated */       optInNbDev = 1.000000e+0;
204 /* Generated */    else if( (optInNbDev < -3.000000e+37) ||/* Generated */  (optInNbDev > 3.000000e+37) )
205 /* Generated */       return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
206 /* Generated */
207 /* Generated */    #if !defined(_JAVA)
208 /* Generated */    if( !outReal )
209 /* Generated */       return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
210 /* Generated */
211 /* Generated */    #endif /* !defined(_JAVA) */
212 /* Generated */ #endif /* TA_FUNC_NO_RANGE_CHECK */
213 /* Generated */
214 /**** END GENCODE SECTION 4 - DO NOT DELETE THIS LINE ****/
215 
216    /* Insert TA function code here. */
217 
218    /* Calculate the variance. */
219    retCode = FUNCTION_CALL(INT_VAR)( startIdx, endIdx,
220                                      inReal, optInTimePeriod,
221                                      outBegIdx, outNBElement, outReal );
222 
223    if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) )
224       return retCode;
225 
226    /* Calculate the square root of each variance, this
227     * is the standard deviation.
228     *
229     * Multiply also by the ratio specified.
230     */
231    if( optInNbDev != 1.0 )
232    {
233       for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ )
234       {
235          tempReal = outReal[i];
236          if( !TA_IS_ZERO_OR_NEG(tempReal) )
237             outReal[i] = std_sqrt(tempReal) * optInNbDev;
238          else
239             outReal[i] = (double)0.0;
240       }
241    }
242    else
243    {
244       for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ )
245       {
246          tempReal = outReal[i];
247          if( !TA_IS_ZERO_OR_NEG(tempReal) )
248             outReal[i] = std_sqrt(tempReal);
249          else
250             outReal[i] = (double)0.0;
251       }
252    }
253 
254    return ENUM_VALUE(RetCode,TA_SUCCESS,Success);
255 }
256 
257 /* The inMovAvg is the moving average of the inReal.
258  *
259  * inMovAvgBegIdx is relative to inReal, in other word
260  * this is the 'outBegIdx' who was returned when doing the
261  * MA on the inReal.
262  *
263  * inMovAvgNbElement is the number of element who was returned
264  * when doing the MA on the inReal.
265  *
266  * Note: This function is not used by TA_STDDEV, since TA_STDDEV
267  *       is optimized considering it uses always a simple moving
268  *       average. Still the function is put here because it is
269  *       closely related.
270  */
271 #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT)
272 void Core::TA_INT_stddev_using_precalc_ma( SubArray^ inReal,
273 										cli::array<double>^ inMovAvg,
274                                         int inMovAvgBegIdx,
275                                         int inMovAvgNbElement,
276                                         int timePeriod,
277 										cli::array<double>^ output)
278 #elif defined( _MANAGED )
279 void Core::TA_INT_stddev_using_precalc_ma( cli::array<INPUT_TYPE>^ inReal,
280 										cli::array<double>^ inMovAvg,
281                                         int inMovAvgBegIdx,
282                                         int inMovAvgNbElement,
283                                         int timePeriod,
284 										cli::array<double>^ output)
285 #elif defined( _JAVA )
286 void TA_INT_stddev_using_precalc_ma( INPUT_TYPE inReal[],
287                                      double     inMovAvg[],
288                                      int        inMovAvgBegIdx,
289                                      int        inMovAvgNbElement,
290                                      int        timePeriod,
291                                      double     output[] )
292 #else
293 void TA_PREFIX(INT_stddev_using_precalc_ma)( const INPUT_TYPE *inReal,
294                                              const double *inMovAvg,
295                                              int inMovAvgBegIdx,
296                                              int inMovAvgNbElement,
297                                              int timePeriod,
298                                              double *output )
299 #endif
300 {
301    double tempReal, periodTotal2, meanValue2;
302    int outIdx;
303 
304    /* Start/end index for sumation. */
305    int startSum, endSum;
306 
307    startSum = 1+inMovAvgBegIdx-timePeriod;
308    endSum = inMovAvgBegIdx;
309 
310    periodTotal2 = 0;
311 
312    for( outIdx = startSum; outIdx < endSum; outIdx++)
313    {
314       tempReal = inReal[outIdx];
315       tempReal *= tempReal;
316       periodTotal2 += tempReal;
317    }
318 
319    for( outIdx=0; outIdx < inMovAvgNbElement; outIdx++, startSum++, endSum++ )
320    {
321       tempReal = inReal[endSum];
322       tempReal *= tempReal;
323       periodTotal2 += tempReal;
324       meanValue2 = periodTotal2/timePeriod;
325 
326       tempReal = inReal[startSum];
327       tempReal *= tempReal;
328       periodTotal2 -= tempReal;
329 
330       tempReal = inMovAvg[outIdx];
331       tempReal *= tempReal;
332       meanValue2 -= tempReal;
333 
334       if( !TA_IS_ZERO_OR_NEG(meanValue2) )
335          output[outIdx] = std_sqrt(meanValue2);
336       else
337          output[outIdx] = (double)0.0;
338    }
339 }
340 
341 /**** START GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/
342 /* Generated */
343 /* Generated */ #define  USE_SINGLE_PRECISION_INPUT
344 /* Generated */ #if !defined( _MANAGED ) && !defined( _JAVA )
345 /* Generated */    #undef   TA_PREFIX
346 /* Generated */    #define  TA_PREFIX(x) TA_S_##x
347 /* Generated */ #endif
348 /* Generated */ #undef   INPUT_TYPE
349 /* Generated */ #define  INPUT_TYPE float
350 /* Generated */ #if defined( _MANAGED )
351 /* Generated */ enum class Core::RetCode Core::StdDev( int    startIdx,
352 /* Generated */                                        int    endIdx,
353 /* Generated */                                        cli::array<float>^ inReal,
354 /* Generated */                                        int           optInTimePeriod, /* From 2 to 100000 */
355 /* Generated */                                        double        optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */
356 /* Generated */                                        [Out]int%    outBegIdx,
357 /* Generated */                                        [Out]int%    outNBElement,
358 /* Generated */                                        cli::array<double>^  outReal )
359 /* Generated */ #elif defined( _JAVA )
360 /* Generated */ public RetCode stdDev( int    startIdx,
361 /* Generated */                        int    endIdx,
362 /* Generated */                        float        inReal[],
363 /* Generated */                        int           optInTimePeriod, /* From 2 to 100000 */
364 /* Generated */                        double        optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */
365 /* Generated */                        MInteger     outBegIdx,
366 /* Generated */                        MInteger     outNBElement,
367 /* Generated */                        double        outReal[] )
368 /* Generated */ #else
369 /* Generated */ TA_RetCode TA_S_STDDEV( int    startIdx,
370 /* Generated */                         int    endIdx,
371 /* Generated */                         const float  inReal[],
372 /* Generated */                         int           optInTimePeriod, /* From 2 to 100000 */
373 /* Generated */                         double        optInNbDev, /* From TA_REAL_MIN to TA_REAL_MAX */
374 /* Generated */                         int          *outBegIdx,
375 /* Generated */                         int          *outNBElement,
376 /* Generated */                         double        outReal[] )
377 /* Generated */ #endif
378 /* Generated */ {
379 /* Generated */    int i;
380 /* Generated */    ENUM_DECLARATION(RetCode) retCode;
381 /* Generated */    double tempReal;
382 /* Generated */  #ifndef TA_FUNC_NO_RANGE_CHECK
383 /* Generated */     if( startIdx < 0 )
384 /* Generated */        return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_START_INDEX,OutOfRangeStartIndex);
385 /* Generated */     if( (endIdx < 0) || (endIdx < startIdx))
386 /* Generated */        return ENUM_VALUE(RetCode,TA_OUT_OF_RANGE_END_INDEX,OutOfRangeEndIndex);
387 /* Generated */     #if !defined(_JAVA)
388 /* Generated */     if( !inReal ) return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
389 /* Generated */     #endif
390 /* Generated */     if( (int)optInTimePeriod == TA_INTEGER_DEFAULT )
391 /* Generated */        optInTimePeriod = 5;
392 /* Generated */     else if( ((int)optInTimePeriod < 2) || ((int)optInTimePeriod > 100000) )
393 /* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
394 /* Generated */     if( optInNbDev == TA_REAL_DEFAULT )
395 /* Generated */        optInNbDev = 1.000000e+0;
396 /* Generated */     else if( (optInNbDev < -3.000000e+37) ||  (optInNbDev > 3.000000e+37) )
397 /* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
398 /* Generated */     #if !defined(_JAVA)
399 /* Generated */     if( !outReal )
400 /* Generated */        return ENUM_VALUE(RetCode,TA_BAD_PARAM,BadParam);
401 /* Generated */     #endif
402 /* Generated */  #endif
403 /* Generated */    retCode = FUNCTION_CALL(INT_VAR)( startIdx, endIdx,
404 /* Generated */                                      inReal, optInTimePeriod,
405 /* Generated */                                      outBegIdx, outNBElement, outReal );
406 /* Generated */    if( retCode != ENUM_VALUE(RetCode,TA_SUCCESS,Success) )
407 /* Generated */       return retCode;
408 /* Generated */    if( optInNbDev != 1.0 )
409 /* Generated */    {
410 /* Generated */       for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ )
411 /* Generated */       {
412 /* Generated */          tempReal = outReal[i];
413 /* Generated */          if( !TA_IS_ZERO_OR_NEG(tempReal) )
414 /* Generated */             outReal[i] = std_sqrt(tempReal) * optInNbDev;
415 /* Generated */          else
416 /* Generated */             outReal[i] = (double)0.0;
417 /* Generated */       }
418 /* Generated */    }
419 /* Generated */    else
420 /* Generated */    {
421 /* Generated */       for( i=0; i < (int)VALUE_HANDLE_DEREF(outNBElement); i++ )
422 /* Generated */       {
423 /* Generated */          tempReal = outReal[i];
424 /* Generated */          if( !TA_IS_ZERO_OR_NEG(tempReal) )
425 /* Generated */             outReal[i] = std_sqrt(tempReal);
426 /* Generated */          else
427 /* Generated */             outReal[i] = (double)0.0;
428 /* Generated */       }
429 /* Generated */    }
430 /* Generated */    return ENUM_VALUE(RetCode,TA_SUCCESS,Success);
431 /* Generated */ }
432 /* Generated */ #if defined( _MANAGED ) && defined( USE_SUBARRAY ) && !defined(USE_SINGLE_PRECISION_INPUT)
433 /* Generated */ void Core::TA_INT_stddev_using_precalc_ma( SubArray^ inReal,
434 /* Generated */ 										cli::array<double>^ inMovAvg,
435 /* Generated */                                         int inMovAvgBegIdx,
436 /* Generated */                                         int inMovAvgNbElement,
437 /* Generated */                                         int timePeriod,
438 /* Generated */ 										cli::array<double>^ output)
439 /* Generated */ #elif defined( _MANAGED )
440 /* Generated */ void Core::TA_INT_stddev_using_precalc_ma( cli::array<INPUT_TYPE>^ inReal,
441 /* Generated */ 										cli::array<double>^ inMovAvg,
442 /* Generated */                                         int inMovAvgBegIdx,
443 /* Generated */                                         int inMovAvgNbElement,
444 /* Generated */                                         int timePeriod,
445 /* Generated */ 										cli::array<double>^ output)
446 /* Generated */ #elif defined( _JAVA )
447 /* Generated */ void TA_INT_stddev_using_precalc_ma( INPUT_TYPE inReal[],
448 /* Generated */                                      double     inMovAvg[],
449 /* Generated */                                      int        inMovAvgBegIdx,
450 /* Generated */                                      int        inMovAvgNbElement,
451 /* Generated */                                      int        timePeriod,
452 /* Generated */                                      double     output[] )
453 /* Generated */ #else
454 /* Generated */ void TA_PREFIX(INT_stddev_using_precalc_ma)( const INPUT_TYPE *inReal,
455 /* Generated */                                              const double *inMovAvg,
456 /* Generated */                                              int inMovAvgBegIdx,
457 /* Generated */                                              int inMovAvgNbElement,
458 /* Generated */                                              int timePeriod,
459 /* Generated */                                              double *output )
460 /* Generated */ #endif
461 /* Generated */ {
462 /* Generated */    double tempReal, periodTotal2, meanValue2;
463 /* Generated */    int outIdx;
464 /* Generated */    int startSum, endSum;
465 /* Generated */    startSum = 1+inMovAvgBegIdx-timePeriod;
466 /* Generated */    endSum = inMovAvgBegIdx;
467 /* Generated */    periodTotal2 = 0;
468 /* Generated */    for( outIdx = startSum; outIdx < endSum; outIdx++)
469 /* Generated */    {
470 /* Generated */       tempReal = inReal[outIdx];
471 /* Generated */       tempReal *= tempReal;
472 /* Generated */       periodTotal2 += tempReal;
473 /* Generated */    }
474 /* Generated */    for( outIdx=0; outIdx < inMovAvgNbElement; outIdx++, startSum++, endSum++ )
475 /* Generated */    {
476 /* Generated */       tempReal = inReal[endSum];
477 /* Generated */       tempReal *= tempReal;
478 /* Generated */       periodTotal2 += tempReal;
479 /* Generated */       meanValue2 = periodTotal2/timePeriod;
480 /* Generated */       tempReal = inReal[startSum];
481 /* Generated */       tempReal *= tempReal;
482 /* Generated */       periodTotal2 -= tempReal;
483 /* Generated */       tempReal = inMovAvg[outIdx];
484 /* Generated */       tempReal *= tempReal;
485 /* Generated */       meanValue2 -= tempReal;
486 /* Generated */       if( !TA_IS_ZERO_OR_NEG(meanValue2) )
487 /* Generated */          output[outIdx] = std_sqrt(meanValue2);
488 /* Generated */       else
489 /* Generated */          output[outIdx] = (double)0.0;
490 /* Generated */    }
491 /* Generated */ }
492 /* Generated */
493 /* Generated */ #if defined( _MANAGED )
494 /* Generated */ }}} // Close namespace TicTacTec.TA.Lib
495 /* Generated */ #endif
496 /**** END GENCODE SECTION 5 - DO NOT DELETE THIS LINE ****/
497 
498