计算一个数的平方根。 为Q15,Q31,浮点类型实现了不同的函数。 当CPU有FPU时,指令fsqrts
被用来计算结果,而当没有FPU时,牛顿迭代法 被用来计算结果。 迭代的算法公式如下:
x1 = x0 - f(x0)/f'(x0)
其中 x1
是当前估计值, x0
是上一次估计值, f'(x0)
是 f()
在x0点的导数。 对于平方根函数,算法简化为:
x0 = in/2 [最初的猜测值]
x1 = 1/2 * ( x0 + in / x0) [每次迭代的公式]
- 参数
-
[in] | in | 输入值. |
[out] | pOut | 输入值的平方根. |
- 返回
- 如果输入值是正数,函数返回CSKY_MATH_SUCCESS,如果是负数,则返回CSKY_MATH_ARGUMENT_ERROR, 并且,返回的参数*pOut = 0.
- 参数
-
[in] | in | 输入值,输入值的范围是[0 +1) 或者 0x0000 到 0x7FFF. |
[out] | *pOut | 输入值的平方根. |
- 返回
- 如果输入值是正数,函数返回CSKY_MATH_SUCCESS, 如果输入是负数,则返回CSKY_MATH_ARGUMENT_ERROR. 对负数输入,返回的参数*pOut = 0.
- 参数
-
[in] | in | 输入值,输入值的范围是[0 +1) 或者 0x00000000 到 0x7FFFFFFF. |
[out] | *pOut | 输入值的平方根. |
- 返回
- 如果输入值是正数,函数返回CSKY_MATH_SUCCESS, 如果输入是负数,则返回CSKY_MATH_ARGUMENT_ERROR. 对负数输入,返回的参数*pOut = 0.
- 注解
- 当硬浮点指令
fsqrts
被使用时,函数的精度会从3 LSB 降到7 LSB。 调用这个函数的相关函数也是如此。