How do I get a Decimal square root of a negative Decimal number in Python?

痴心易碎 提交于 2020-07-03 08:24:26

问题


To get the sqaure root of a negative number we could use cmath.sqrt. But either the real part or the imag part of the result is still a float:

type (cmath.sqrt (Decimal (-8)).imag)

result: float

How do I get a Decimal square root of a negative Decimal number?

For a positive number we could use: Decimal (8).sqrt ()

The result is still a Decimal. But it doesn't work on negative numbers: Decimal (-8).sqrt ()

{InvalidOperation}[]


回答1:


You could implement a ComplexDecimal() class with that functionality.

Here is some code to get you going:

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'>

and then you need to implement multiplication, division, etc. yourself, but that should be pretty straightforward.




回答2:


you can do x ** 0.5 where x is a negative number, for example:

>>> x = -10
>>> x ** 0.5
(1.9363366072701937e-16+3.1622776601683795j)


来源:https://stackoverflow.com/questions/61008446/how-do-i-get-a-decimal-square-root-of-a-negative-decimal-number-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!