【发布时间】:2017-12-31 13:14:23
【问题描述】:
from math import log,sqrt
import sys
n = 760 ** 890
print(log(n))
我得到一个有效的结果。
现在将log 更改为sqrt,你会得到(如预期的那样):
OverflowError: int too large to convert to float
所以我想log 函数中的整数参数有一个技巧,使用整数对数,但我在文档中没有找到。只有this:
math.log(x[, base])
使用一个参数,返回 x 的自然对数(以 e 为底)。
使用两个参数,将 x 的对数返回给定底数,计算方式为 log(x)/log(base)。
记录在哪里?
【问题讨论】:
-
"CPython 实现细节: 数学模块主要由围绕平台 C 数学库函数的薄包装器组成。" - 我认为这包括 @ 987654327@,所以这可能取决于平台,不一定是 Python 问题。
-
你真的得到了
760 ** 890的有效结果吗?在我的机器 (osx) 上是5903.65340562但 wolfram alpha 说:451.131905409 -
@user1767754 尝试 890 * log(760) 以确认结果正确。不确定,你在 wolfram alpha 上发现了什么。
-
@Jean-FrançoisFabre: log(760*890) 返回“5903.653405619535318946719985244828084080638106597086949503....”。在 Wolfram Alpha 中。这似乎是正确的(用我自己的 BigInteger 的 Delphi 实现对其进行了测试)。
-
@user1767754:Wolfram Alpha 为我返回 5903.etc。你从哪里得到的 451.etc 值?
标签: python floating-point logarithm