You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中基于高精度参考值绘制float32精度误差的方法咨询

问题:float32精度可视化的优化方案与工具建议

我希望使用精度高于float32的参考值来绘制float32表示的精度。我了解可以使用ULP值来绘制,但希望采用显式参考值的方式(后续需用该方法测试不同算术数表示)。

我配置参考向量与测试向量的代码如下:

mp.dps = 256
mp.prec = 256
mp.pretty = True

test_vec = np.float32(np.linspace(min, max, res))
ref_vec = mp.linspace(min, max, res)
sol_vec = ref_vec-test_vec
sol_vec = [mp.fabs(val) for val in sol_vec]

plt.figure()
plt.title(f"Floating point size {float_type}bits, accuracy")
plt.xlabel("Test value range")
plt.ylabel("Error")
plt.plot(mp.linspace(min, max, sol_vec.__len__()), sol_vec)
plt.grid()
plt.show()

请问是否有更优的计算方式?是否有相关建议或其他更合适的库可以考虑?


更优计算方式

  • 复用采样点数组:绘图时无需重新生成mp.linspace,直接用test_vec作为x轴数据即可,它和参考向量的采样点一一对应,能减少冗余计算:
    plt.plot(test_vec, sol_vec)
    
  • 向量化误差计算:用mp.vectorize包装mp.fabs,直接对整个误差数组做向量化处理,替代列表推导式,提升运算效率:
    fabs_vec = mp.vectorize(mp.fabs)
    sol_vec = fabs_vec(ref_vec - test_vec)
    
  • 简化精度配置:mp.dps(十进制精度)和mp.prec(二进制精度)只需设置一个即可,256位二进制精度对应约77位十进制精度,保留mp.prec = 256就足够,无需重复设置mp.dps。

相关建议与替代库

实用建议

  • 覆盖特殊数值:除了常规范围,加入float32的特殊值(最小正浮点数、最大浮点数、次正规数)测试,能更全面反映精度特性。
  • 补充相对误差分析:除了绝对误差,计算相对误差(abs((ref - test)/ref)),更直观体现不同数值区间的精度变化趋势。

替代库选项

  • decimal(Python标准库):支持高精度十进制浮点运算,配置灵活,适合需要严格十进制精度控制的场景,无需额外安装。
  • gmpy2:基于GMP的高性能高精度运算库,支持整数、有理数和浮点数计算,运算速度优于mpmath,适合大规模数值测试场景。
  • NumPy longdouble:若不需要极端高精度,np.longdouble(通常为80位扩展精度浮点数)可作为快速参考值来源,运算效率远高于mpmath,适合初步精度验证。

内容的提问来源于stack exchange,提问作者makkii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:03:31