相关疑难解决方法(0)

哪个在Python中更快:x**.5还是math.sqrt(x)?

我一直在想这个问题.正如标题所说,哪个更快,实际功能还是简单地提升到半功率?

UPDATE

这不是过早优化的问题.这只是底层代码实际工作原理的问题.Python代码的工作原理是什么?

我发送了Guido van Rossum电子邮件,因为我真的很想知道这些方法的不同之处.

我的电子邮件:

在Python中至少有3种方法可以做平方根:math.sqrt,'**'运算符和pow(x,.5).我只是好奇每个实现的差异.谈到效率哪个更好?

他的回答是:

pow和**是等价的; math.sqrt不适用于复数,也不适用于C sqrt()函数的链接.至于哪一个更快,我不知道......

python performance

175
推荐指数
5
解决办法
6万
查看次数

如何在Python中计算平方根?

为什么Python会给出"错误"的答案?

x = 16

sqrt = x**(.5)
returns 4

sqrt = x**(1/2)
returns 1
Run Code Online (Sandbox Code Playgroud)

是的,我知道import math并使用sqrt.但我正在寻找上述答案.

python math sqrt

123
推荐指数
6
解决办法
42万
查看次数

python中的整数平方根

在python或标准库中是否存在整数平方根?我希望它是准确的(即返回一个整数),并且如果没有解决方案则吠叫.

目前我推出了自己的天真的:

def isqrt(n):
    i = int(math.sqrt(n) + 0.5)
    if i**2 == n:
        return i
    raise ValueError('input was not a perfect square')
Run Code Online (Sandbox Code Playgroud)

但它很难看,我不相信大整数.如果我超过了这个值,我可以遍历正方形并放弃,但我认为做这样的事情会有点慢.另外我想我可能正在重新发明轮子,这样的东西肯定已经存在于python ......

python math integer sqrt

51
推荐指数
7
解决办法
5万
查看次数

在Python中是否存在x的第n个根的简写

简单的语法问题.

在数学中,如果我有两个数字3和2,我希望计算3到2的幂,那么不需要符号,但我写了两个小.在Python这个操作中似乎用**语法表示.

>>> 3**2
9
Run Code Online (Sandbox Code Playgroud)

如果我想转向另一个方向并计算9的第2根,那么在数学中我需要使用符号:

x的第n个根

在Python中是否有一个简写符号,类似于**实现这一点即2<symbol>9.或者我需要使用该math模块吗?

python math operators

25
推荐指数
4
解决办法
3万
查看次数

平方根的任意精度

decimal.Decimal(math.sqrt(2))屈服时我很失望

Decimal('1.4142135623730951454746218587388284504413604736328125')
Run Code Online (Sandbox Code Playgroud)

并且小数点后15位的数字错误.(尽管很乐意给你超过15位数!)

如何在Python 的十进制扩展中获得第一个m 正确的数字sqrt(n)

python math

20
推荐指数
2
解决办法
9871
查看次数

如何找到整数第n个根?

我想找到小于或等于n的第k个根的最大整数.我试过了

int(n**(1/k))
Run Code Online (Sandbox Code Playgroud)

但是对于n = 125,k = 3,这给出了错误的答案!我碰巧知道5立方是125.

>>> int(125**(1/3))
4
Run Code Online (Sandbox Code Playgroud)

什么是更好的算法?


背景:2011年,这次失误让我击败Google Code Jam.https://code.google.com/codejam/contest/dashboard?c=1150486#s=p2

python algorithm math

15
推荐指数
2
解决办法
2万
查看次数

如何在Python中为自定义类重载`float()`?

摘要

如何重载float我的类的内置float()函数,所以当我调用它的实例时,我的自定义函数被调用而不是默认的内置函数?

我的课

嗨,我正在编写自己的Fractions类(对于任意高的浮点运算精度).它是这样的(我还没有完成):

class Fractions:
    """My custom Fractions class giving arbitarilly high precision w/ floating-point arithmetic."""

    def __init__(self, num = 0, denom = 1):
        """Fractions(num = 0, denom = 1) -> Fractions object

        Class implementing rational numbers. In the two-argument form of the constructor, Fraction(8, 6) will produce a rational number equivalent to 4/3.
        Both arguments must be rational, i.e, ints, floats etc. .The numerator defaults to 0 and the denominator defaults to …
Run Code Online (Sandbox Code Playgroud)

python floating-point overloading operator-overloading

9
推荐指数
1
解决办法
5421
查看次数

如何使用python取-1的平方根?

当我取-1的平方根时,它给出了一个错误:

sqrt中遇到无效值

我该如何解决这个问题?

/////////
arr=sqrt(-1)
print(arr)
OUTPUT
Run Code Online (Sandbox Code Playgroud)

python numpy

9
推荐指数
3
解决办法
1万
查看次数

**(1/2),math.sqrt和cmath.sqrt之间的区别?

有什么区别x**(1/2),math.sqrt()cmath.sqrt()

为什么cmath.sqrt()单独得到二次方的复杂根?我应该专门用于我的平方根吗?他们在背景中的做法有何不同?

python math sqrt square-root

7
推荐指数
2
解决办法
6300
查看次数

在python中使用数学模块的sqrt函数来获取长数

我正在使用python中的200位数字.当使用math.sqrt(n)找到数字的平方根时,我得到了错误的答案.

In[1]: n=9999999999999999999999999999999999999999999999999999999999999999999999
       999999999999999999999999998292000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000726067

In[2]: x=int(math.sqrt(n))

In[3]: x
Out[1]: 10000000000000000159028911097599180468360808563945281389781327
        557747838772170381060813469985856815104L

In[4]: x*x
Out[2]: 1000000000000000031805782219519836346574107361670094060730052612580
        0264077231077619856175974095677538298443892851483731336069235827852
        3336313169161345893842466001164011496325176947445331439002442530816L

In[5]: math.sqrt(n)
Out[3]: 1e+100
Run Code Online (Sandbox Code Playgroud)

由于x*x(201位)大于n(200位),因此x的值大于预期值.这里发生了什么?是否有一些概念我在这里错了?我怎么能找到大数字的根?

python long-integer

4
推荐指数
2
解决办法
4584
查看次数

为什么 math.sqrt() 对于大数不正确?

为什么math模块返回错误的结果?

第一次测试

A = 12345678917
print 'A =',A
B = sqrt(A**2)
print 'B =',int(B)
Run Code Online (Sandbox Code Playgroud)

结果

A = 12345678917
B = 12345678917
Run Code Online (Sandbox Code Playgroud)

到这里,结果是正确的。

第二次测试

A = 123456758365483459347856
print 'A =',A
B = sqrt(A**2)
print 'B =',int(B)
Run Code Online (Sandbox Code Playgroud)

结果

A = 123456758365483459347856
B = 123456758365483467538432
Run Code Online (Sandbox Code Playgroud)

这里的结果是不正确的。

为什么会这样?

python math sqrt

4
推荐指数
2
解决办法
3878
查看次数

Python 3中数字大于10 ^ 2000的平方根

我想在Python中计算一个大于10 ^ 2000的数字的平方根.如果我将此数字视为普通整数,我将始终得到此结果:

Traceback (most recent call last):
  File "...", line 3, in <module>
    print( q*(0.5)  )
OverflowError: int too large to convert to float
Run Code Online (Sandbox Code Playgroud)

我该如何解决?或者除了使用Python之外是否存在计算此平方根的可能性?

python python-3.x

3
推荐指数
2
解决办法
1038
查看次数