CMSIS DSP Lib
Fork of mbed-dsp by
Diff: cmsis_dsp/FastMathFunctions/arm_sqrt_q15.c
- Revision:
- 3:7a284390b0ce
- Parent:
- 2:da51fb522205
diff -r da51fb522205 -r 7a284390b0ce cmsis_dsp/FastMathFunctions/arm_sqrt_q15.c --- a/cmsis_dsp/FastMathFunctions/arm_sqrt_q15.c Thu May 30 17:10:11 2013 +0100 +++ b/cmsis_dsp/FastMathFunctions/arm_sqrt_q15.c Fri Nov 08 13:45:10 2013 +0000 @@ -1,8 +1,8 @@ /* ---------------------------------------------------------------------- -* Copyright (C) 2011 ARM Limited. All rights reserved. +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. * -* $Date: 15. February 2012 -* $Revision: V1.1.0 +* $Date: 17. January 2013 +* $Revision: V1.4.1 * * Project: CMSIS DSP Library * Title: arm_sqrt_q15.c @@ -11,15 +11,31 @@ * * Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 * -* Version 1.1.0 2012/02/15 -* Updated with more optimizations, bug fixes and minor API changes. -* -* Version 1.0.0 2011/03/08 -* Alpha release. -* -* Version 1.0.1 2011/09/30 -* Beta release. -* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. * -------------------------------------------------------------------- */ #include "arm_math.h" #include "arm_common_tables.h" @@ -38,8 +54,9 @@ * @brief Q15 square root function. * @param[in] in input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF. * @param[out] *pOut square root of input value. - * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if - * <code>in</code> is negative value and returns zero output for negative values. + * @return The function returns ARM_MATH_SUCCESS if the input value is positive + * and ARM_MATH_ARGUMENT_ERROR if the input is negative. For + * negative inputs, the function returns *pOut = 0. */ arm_status arm_sqrt_q15( @@ -49,6 +66,11 @@ q15_t number, temp1, var1, signBits1, half; q31_t bits_val1; float32_t temp_float1; + union + { + q31_t fracval; + float32_t floatval; + } tempconv; number = in; @@ -75,11 +97,13 @@ /*Convert to float */ temp_float1 = number * 3.051757812500000e-005f; /*Store as integer */ - bits_val1 = *(int *) &temp_float1; + tempconv.floatval = temp_float1; + bits_val1 = tempconv.fracval; /* Subtract the shifted value from the magic number to give intial guess */ bits_val1 = 0x5f3759df - (bits_val1 >> 1); // gives initial guess /* Store as float */ - temp_float1 = *(float *) &bits_val1; + tempconv.fracval = bits_val1; + temp_float1 = tempconv.floatval; /* Convert to integer format */ var1 = (q31_t) (temp_float1 * 16384);