【问题标题】:Python math domain error using math.acos function [closed]使用 math.acos 函数的 Python 数学域错误 [关闭]
【发布时间】:2015-06-20 14:26:51
【问题描述】:

我正在使用 math.acos() 函数:

math.acos(1.0000000000000002)

这会引发数学域错误。有人能说出原因吗?我之前计算过这个值,这里这个值给出了错误,但如果我最后删除 2 它不会抛出错误。我没有得到这个的原因。

【问题讨论】:

  • 角度的余弦值始终在[-1.0, 1.0] 范围内,因此反函数仅针对该范围内的输入定义。你给acos 一个大于1 的值:没有可能的(实)角的余弦大于1。
  • 从数学上讲,您的预期结果是什么?
  • 这个具体问题在数值编程中经常出现。投票重新开放。
  • 我不明白为什么这个问题被关闭了。我的同事今天有这个确切的问题,并且或多或少地说明了他是如何提出的。
  • 我在计算math.acos(numpy.dot(a,b)) 时遇到了这个问题,其中numpy.dot 返回1.0000000000000002 而不是1(由于浮点精度)。有关此问题的解决方案,请参阅 this post。

标签: python


【解决方案1】:

您正在尝试对不存在acos 的号码执行acos。

Acos - Arccosine , which is the inverse of cosine function.

acos 的输入值范围为-1 <= x <= 1。

因此,当您尝试执行 - math.acos(1.0000000000000002) 时,您会收到错误消息。

如果您尝试更高的数字,您将不断收到相同的错误 - math.acos(2) - 导致 - ValueError: math domain error

【讨论】:

  • 1.0000000000000002从什么时候开始“一个不存在的数字”?!
  • 将措辞修正为 - 您正在尝试对不存在 acos 的号码执行 acos。
【解决方案2】:

反余弦值仅在 -1 和 1 之间定义,包括两个值。 1.0000000000000002 的反余弦除了“不存在”或“未定义”之外没有任何数学或语义含义。

当然,因为 1 的反余弦确实存在,所以 acos(1) 不会抛出任何错误。

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 2018-06-22
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2022-12-24
    • 1970-01-01
    相关资源
    最近更新 更多