如何获得 Python 中负十进制数的十进制平方根?
How do I get a Decimal square root of a negative Decimal number in Python?
要获得负数的平方根,我们可以使用 cmath.sqrt。但是结果的实部或虚部仍然是一个浮点数:
type (cmath.sqrt (Decimal (-8)).imag)
结果:浮动
如何得到负十进制数的小数平方根?
对于正数,我们可以使用:Decimal (8).sqrt ()
结果仍然是小数。但它不适用于负数:Decimal (-8).sqrt ()
{无效操作}[]
你可以 x ** 0.5
其中 x 是负数,例如:
>>> x = -10
>>> x ** 0.5
(1.9363366072701937e-16+3.1622776601683795j)
您可以实现具有该功能的 ComplexDecimal()
class。
这里有一些代码可以让你继续:
from decimal import Decimal
class ComplexDecimal(object):
def __init__(self, value):
self.real = Decimal(value.real)
self.imag = Decimal(value.imag)
def __add__(self, other):
result = ComplexDecimal(self)
result.real += Decimal(other.real)
result.imag += Decimal(other.imag)
return result
__radd__ = __add__
def __str__(self):
return f'({str(self.real)}+{str(self.imag)}j)'
def sqrt(self):
result = ComplexDecimal(self)
if self.imag:
raise NotImplementedError
elif self.real > 0:
result.real = self.real.sqrt()
return result
else:
result.imag = (-self.real).sqrt()
result.real = Decimal(0)
return result
x = ComplexDecimal(2 + 3j)
print(x)
# (2+3j)
print(x + 3)
# (5+3j)
print(3 + x)
# (5+3j)
print((-8) ** (0.5))
# (1.7319121124709868e-16+2.8284271247461903j)
print(ComplexDecimal(-8).sqrt())
# (0+2.828427124746190097603377448j)
print(type(ComplexDecimal(8).sqrt().imag))
# <class 'decimal.Decimal'>
然后您需要自己实现乘法、除法等,但这应该非常简单。
要获得负数的平方根,我们可以使用 cmath.sqrt。但是结果的实部或虚部仍然是一个浮点数:
type (cmath.sqrt (Decimal (-8)).imag)
结果:浮动
如何得到负十进制数的小数平方根?
对于正数,我们可以使用:Decimal (8).sqrt ()
结果仍然是小数。但它不适用于负数:Decimal (-8).sqrt ()
{无效操作}[]
你可以 x ** 0.5
其中 x 是负数,例如:
>>> x = -10
>>> x ** 0.5
(1.9363366072701937e-16+3.1622776601683795j)
您可以实现具有该功能的 ComplexDecimal()
class。
这里有一些代码可以让你继续:
from decimal import Decimal
class ComplexDecimal(object):
def __init__(self, value):
self.real = Decimal(value.real)
self.imag = Decimal(value.imag)
def __add__(self, other):
result = ComplexDecimal(self)
result.real += Decimal(other.real)
result.imag += Decimal(other.imag)
return result
__radd__ = __add__
def __str__(self):
return f'({str(self.real)}+{str(self.imag)}j)'
def sqrt(self):
result = ComplexDecimal(self)
if self.imag:
raise NotImplementedError
elif self.real > 0:
result.real = self.real.sqrt()
return result
else:
result.imag = (-self.real).sqrt()
result.real = Decimal(0)
return result
x = ComplexDecimal(2 + 3j)
print(x)
# (2+3j)
print(x + 3)
# (5+3j)
print(3 + x)
# (5+3j)
print((-8) ** (0.5))
# (1.7319121124709868e-16+2.8284271247461903j)
print(ComplexDecimal(-8).sqrt())
# (0+2.828427124746190097603377448j)
print(type(ComplexDecimal(8).sqrt().imag))
# <class 'decimal.Decimal'>
然后您需要自己实现乘法、除法等,但这应该非常简单。