Numpy clongdouble类型在非Numpy运算中能否维持精度?
关于射频模拟器复数运算精度的解答
- 不需要非得用Numpy来执行这些运算,普通Python运算也能满足精度要求,关键是别让高精度的
clongdouble类型被降级。 - 你的A、B、C、D是
np.clongdouble类型的高精度复数,Z0是普通double类型。运算时,低精度的Z0会自动被提升为clongdouble类型参与计算——只要你不主动把A/B/C/D转换成Python原生的complex(双精度,会丢失高精度信息),不管用普通运算符还是Numpy函数,结果都会保持clongdouble的精度。 - 举个实际运算的例子:
两种方式的精度表现完全一致。# 普通Python运算,结果为np.clongdouble,精度保留 den = A + B/z0 + C*z0 + D # Numpy运算,结果同样为np.clongdouble den_np = np.add(np.add(np.add(A, B/z0), C*z0), D) - 要注意的坑:别用
.item()把np.clongdouble转成Python原生complex,这会直接把高精度数据降到双精度,导致精度损失。
内容的提问来源于stack exchange,提问作者clme
相关产品推荐
相关产品推荐

