如何在Python中获得负十进制数的十进制平方根? [英] How do I get a Decimal square root of a negative Decimal number in Python?

查看:121
本文介绍了如何在Python中获得负十进制数的十进制平方根?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

要获取负数的平方根,可以使用cmath.sqrt。但是结果的实部或imag部分仍然是浮点数:

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)

结果:浮点数

如何获得小数平方负数的根?

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

对于正数,我们可以使用:十进制(8).sqrt()

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

结果仍然是小数。但是它不适用于负数:十进制(-8).sqrt()

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

{InvalidOperation} []

{InvalidOperation}[]

推荐答案

您可以使用该方法实现 ComplexDecimal()类功能。

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.

这篇关于如何在Python中获得负十进制数的十进制平方根?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆