2015-06-20 123 views
0

我使用math.acos()函数:Python的数学域错误使用math.acos功能

math.acos(1.0000000000000002) 

这将引发一个数学领域的错误。有人能说出原因吗?我得到这个值之前计算,这里这个值给出了错误,但如果我在结尾删除2它不会抛出错误。我没有理由这样做。

+4

角度的余弦始终在'[-1.0,1.0]'的范围内,所以反函数只针对该范围内的输入定义。你给'acos'一个大于'1'的值:没有可能的(真实的)余弦大于'1'的角度。 –

+0

数学上的预期结果是什么? –

+1

这个特定问题经常出现在数值编程中。投票重新开放。 –

回答

6

您正在尝试执行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

+0

因为什么时候是'1.0000000000000002' *“一个不存在的数字”* ?! – jonrsharpe

+1

修正措辞为 - 您正在尝试对'acos'不存在的数字执行'acos'。 –

2

反余弦仅被定义在-1和1,包容性。除了“不存在”或“未定义”之外,1.0000000000000002的弧余弦不具有数学或语义含义。

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