在python中没有预定义函数的平方根

时间:2017-09-12 18:14:24

标签: python algorithm python-2.7

如何在不使用python中的任何预定义函数的情况下找到数字的平方根?

我需要一个程序的平方根如何工作的主要逻辑。在一般数学中,我们将使用HCF进行,但在编程中,我无法找到逻辑。

5 个答案:

答案 0 :(得分:0)

我会通过构建一个精确猜测的算法来解决这个问题,因为这些步骤很容易理解,并且可以重复直到非常准确。例如:

  • 建立已知的完美正方形(2 ^ 2是4,4 ^ 2是16等)
  • 找出给定数字位于哪个正方形(如果给定10,它位于3 ^ 2(9)和4 ^ 2(16)之间)。因此,10的平方根介于3和4之间。

查看此算法的this link for an easy explanation以及如何重复以确保准确性。

答案 1 :(得分:0)

这是一种可以做到的方法。请注意,它不是数学上最有效的方式,它只是一种简单的方法,而不会搞乱奇怪的数学:

cv2.imwrite

答案 2 :(得分:0)

有一种着名的数学方法称为 Newton-Raphson方法,用于连续发现更接近根的近似值。

基本上,此方法采用初始值,然后在成功的迭代中收敛到解决方案。您可以阅读更多相关信息here

此处附有示例代码供您参考。

{% extends "skeleton.html" %}
{% from "macros/globalmacros.html" import
            SUIIconList,SUISimpleList,
            SUIImageLabel,SUILabel,
            SUIActionInput,SUILabeledInput,SUIInput,
            SUIDimmableActionCard,SUICard,
 %}


{% block frame_content %}
Frame Content
{% endblock frame_content %}

{% block scripts %}

{{ super() }}
<script src=" {{ static("js/globalmacros.js") }} "></script>

{% endblock scripts %}

在这里,您可以通过添加&#39; 0&#39;来提高平方根结果的准确性。小数位后的e和y中的数字。

还有其他方法,如二元搜索,用于查找平方根,如here所示。

答案 3 :(得分:0)

这对我有用:

def sqrt(n):
    for i in range(1, n+1):
        if (n % i == 0) and (i * i == n):
            return i
            break

基本上,程序从1到n循环运行,然后检查n%i = 0和i squared = n,如果为true,则返回i并中断。

答案 4 :(得分:0)

以下 python 实现基于 C++ implementation。代码没有直接使用sqrt,而是使用math.frexpmath.ldexp来计算sqrt。这种算法就像任何其他算法一样适合训练。在专业设置中最好使用 math.sqrt,因为该函数使用直接 Intel instructionARM64 instruction

import math
def sqrt(n):
    if n < 0:
        raise ArithmeticError()
    n, exp = math.frexp(n)
    if (exp & 1):
        exp -= 1
        n *= 2
    y = (1 + n) / 2
    z = 0
    while (y != z):
        z = y
        y = ( y + n/y) / 2
    return math.ldexp(y, int(exp/2))


import unittest

class TestSqrt(unittest.TestCase):

    def test_simple(self):
        self.assertEqual(sqrt(4), math.sqrt(4))

    def test_various(self):
        l = [4, 9, 64, 49, 39499, 48484]
        for i in l:
            self.assertEqual(sqrt(i), math.sqrt(i))


if __name__ == '__main__':
    unittest.main()