首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python数学模块对数函数

Python数学模块对数函数
EN

Stack Overflow用户
提问于 2013-01-29 06:57:27
回答 3查看 7.3K关注 0票数 5

可能重复: Python中的不准确对数

为什么math.log10(x)math.log(x,10)的结果不同?

代码语言:javascript
复制
In [1]: from math import *

In [2]: log10(1000)
Out[2]: 3.0

In [3]: log(1000,10)
Out[3]: 2.9999999999999996
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-29 07:05:01

math.log10math.log(x, 10)采用不同的算法,前者通常更精确。实际上,这是一个已知的问题(Issue6765):math.log,log10不一致

可以这样认为:log10(x)有一个固定的基,因此它可以直接用一些数学近似公式(例如Taylor级数)来计算,而log(x, 10)则来自一个更一般的双变量公式,该公式可以由log(x) / log(10)间接计算(至少log(10)的精度会影响商的精度)。因此,前一种方法更快、更准确,这是很自然的,考虑到它利用了已知的对数基数(即10),这是合理的。

票数 4
EN

Stack Overflow用户

发布于 2013-01-29 07:03:09

这是一个已知的bug:http://bugs.python.org/issue3724

似乎logX(y)总是比等价的日志(Y,X)更精确。

票数 5
EN

Stack Overflow用户

发布于 2013-01-29 07:56:53

正如其他人所指出的,log(1000, 10)是在内部作为log(1000) / log(10)计算的。这一点可以从经验上加以证实:

代码语言:javascript
复制
In [3]: math.log(1000, 10) == math.log(1000) / math.log(10)
Out[3]: True

In [4]: math.log10(1000) == math.log(1000) / math.log(10)
Out[4]: False

log(1000)log(10)的结果都不能表示为float,因此最终的结果也是不准确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14577310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档