python - python中math.pow、numpy.power、numpy.float_power、pow和**的准确性
问题描述
python中的math.pow、numpy.power、numpy.float_power、pow()和**在两个浮点数x、y之间是否存在准确性差异?我假设 x 非常接近 1,并且 y 很大。
解决方案
在所有情况下都会丢失精度的一种方法是,如果您正在计算一个小数(z 说)然后计算
p = pow( 1.0+z, y)
问题是双打有大约 16 个有效数字,所以如果 z 是 1e-8,在形成 1.0+z 时,你将失去这些数字的一半。更糟糕的是,如果 z 小于 1e-16,则 1.0+z 将恰好为 1。
您可以使用 numpy 函数 log1p 来解决这个问题。这会计算其参数的对数加一,而实际上并未将其参数加 1,因此不会丢失精度。
您可以将上面的 p 计算为
p = exp( log1p(z)*y)
这将消除由于计算 1+z 而导致的精度损失
推荐阅读
- jenkins - 如何有条件地在詹金斯的全局工具配置中设置的詹金斯文件中包含特定工具?
- java - 我可以使用 Eclipse IDE 编辑 Docker 映像吗?(Liferay 开发)
- oracle - 我的答案是获取除输出中提供的行之外的多行
- oracle - 我想从 PLSQL 的表中删除带有条件的重复项
- javascript - Guard 不返回经过身份验证的用户
- typescript - Typescript:试图推断键值对类型的值 - Discord.js 动态事件
- amazon-web-services - 用户无权执行:iam:PassRole on role,但它有权限
- pandas - 卡住合并两个数据帧,得到意想不到的结果
- c# - 通用扩展方法类型推断
- r - 如何将数值添加到 R 中的包圆图?