【问题标题】:Python math.log function math domain errorPython math.log 函数数学域错误
【发布时间】:2020-01-15 06:37:38
【问题描述】:

使用下面的代码:

import math
-2/3*math.log(2/3,2)-1/3*math.log(1/3,2)

给:

ValueErrorTraceback(最后一次调用) 在 () 1 导入数学 ----> 2 -2/3*math.log(2/3,2)-1/3*math.log(1/3,2)

ValueError:数学域错误

在哪里:

import math
-.66*math.log(.66,2)-1/3*math.log(.33,2)

工作。

第一个代码有什么问题?

【问题讨论】:

  • 如果您使用的是 Python 2,请获取 Python 3。
  • 这似乎与您使用的 Python 版本有关,出于好奇您使用的是哪个版本?

标签: python math division


【解决方案1】:

我猜这是 Python 2,对吧?

在 Python 2 中,两个整数之间的 / 运算符执行 integer division,只留下小数点左侧的部分。因此,在 Python 2 中,您的表达式将计算为:

-1*math.log(1,2)-1/3*math.log(02)

从这里很容易看出为什么会出现错误。

另一种方法是导入__future__ 除法运算符,它的作用与您期望的一样:

from __future__ import division

【讨论】:

    【解决方案2】:

    这只会发生在 Python 2 中,其中/ 是整数之间的整数除法运算符:1/3 的结果是 0——并且不可能在零上使用 math.log

    在 Python 3 中,/ 始终是浮点除法运算符:1/30.3333333333333333。 (积分除法已移至//。)因此,发布的代码在 Python 3 中不会导致错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 2021-08-04
      • 2011-06-11
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      相关资源
      最近更新 更多