我的代码中有两个复数(使用cmath
模块)应该完全相同的实例,由于base 2系统的浮点精度导致数字偏离,因此不会取消在小数点后第n位的值差异很小。
如果它们是具有足够大小的浮动数字,那么只需将它们四舍五入到小数位,其中值差不再存在就是一个简单的问题。
对于使用cmath
模块表示的复数的实部和虚部,我怎么能这样做呢?
e.g。以下两个复数应该完全相同,我怎么能实现一些代码来确保某些复数的实部和虚部被舍入到我选择的最近的小数位?
(0.6538461538461539-0.2692307692307693j)
(0.6538461538461539-0.26923076923076916j)
jonrsharpe推荐的一种可能的解决方案:
if abs(a - b) < threshold:
a = b
答案 0 :(得分:1)
"round" 不能直接作用于复数,但它可以单独作用于实数。数字的虚部,例如四舍五入:
x = 0.6538461538461539-0.2692307692307693j
x_real = round(x.real, 4)
x_imag = round(x.imag, 4)
x = x_real + x_imag * 1j