Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算复数的模?_Python_Complex Numbers_Modular Arithmetic - Fatal编程技术网

Python 如何计算复数的模?

Python 如何计算复数的模?,python,complex-numbers,modular-arithmetic,Python,Complex Numbers,Modular Arithmetic,我正试图找到一种用Python实现(w+xi)%(y+zi)的方法 我尝试了cmath,但它似乎不支持这一点。我已经确定它在数学上是可能的,并尝试对它进行编程,但它不起作用。代码如下,我发现问题是在除数后的某个时间需要四舍五入,但在其他时间这会产生错误的结果 def ComplexModulo(a,b): x = a/b x = round(x.real) + (round(x.imag)*1j) z = x*b return a-z 我

我正试图找到一种用Python实现
(w+xi)%(y+zi)
的方法

我尝试了
cmath
,但它似乎不支持这一点。我已经确定它在数学上是可能的,并尝试对它进行编程,但它不起作用。代码如下,我发现问题是在除数后的某个时间需要四舍五入,但在其他时间这会产生错误的结果

def ComplexModulo(a,b):
       x = a/b
       x = round(x.real) + (round(x.imag)*1j)
       z = x*b
       return a-z

我需要一个更好的方法来解决这个问题,因为现在如果我做
(8+2j)%(2+1j)
我应该得到
(1+1j)
,但我得到的是
(-1+0j)
。我还尝试将
round
更改为
int
,以及不同的组合,虽然在某些情况下有效,但在其他情况下失败。

模运算的正确定义是使用
floor
而不是
round
。您可以在
math
numpy
软件包中找到这一点

编辑 要详细说明为什么
round()
int()
不起作用,当然这与舍入有关

让我们考虑一个整数例子:

5 / 3 = 1.6666...
5 // 3 = 1
5 % 3 = 2

5 == 3 * 1 + 2
现在:

这将不会为
5/3
的整数商提供正确的结果

另一方面:

int(5 / 3) == 1 == 5 // 3
在这种情况下会给出正确的商

但如果现在考虑:

-5 / 3 = -1.6666...
-5 // 3 = -2
-5 % 3 = 1

-5 == 3 * (-2) + 1
然后:

以及:

在这种情况下,
round()
将给出正确的结果,
int()
将不会给出正确的结果


floor()
,被定义为小于输入的最大整数,在这两种情况下都能正确工作。

它对复数的作用不同,即使如此,实部也不应为负1。这解释了我试图根据你得到的正确输出做什么。这在什么地方真的有用吗?值得将它添加到Python中吗?是的,它很有用,值得添加,尽管它的用途有些模糊,但考虑到它的简单性,我认为它是值得的。
-5 / 3 = -1.6666...
-5 // 3 = -2
-5 % 3 = 1

-5 == 3 * (-2) + 1
int(-5 / 3) == -1 != -5 // 3
round(-5 / 3) == -2 == -5 // 3