math.cos函数返回的值不同于计算器

时间:2017-01-21 20:04:24

标签: python

我有这个函数,它接受一个x值并返回一个输出y值。

def function(x):
    y = math.cos(x**2/2)/(math.log(x+2,2))
    return y

当我调用该函数时,我得到:

print function(1)
>> 0.630929753571

WolframAlpha的x = 1值为0.553693

哪个值正确?

4 个答案:

答案 0 :(得分:0)

这是因为您使用的是Python 2,其中/运算符执行整数除法。这将在Python 3中为您提供正确的答案:

>>> def f(x):
...   y = math.cos(x**2/2)/(math.log(x+2,2))
...   return y
...
>>> f(1)
0.5536929495121011

在Python 3中,使用//运算符进行底层划分:

>>> def f(x):
...   y = math.cos(x**2//2)/(math.log(x+2,2))
...   return y
...
>>> f(1)
0.6309297535714574
>>>

在Python 2中,使用y = math.cos(x**2/ 2.0) / (math.log(x+2,2))

答案 1 :(得分:0)

你将int除以另一个更大的int:1 / 2,因此得到的余弦为零,因为python 2.7不会将整数除法计算为浮点数。尝试:

def function(x):
    y = math.cos(x ** 2 / 2.0) / (math.log(x + 2, 2))
    return y

答案 2 :(得分:0)

Python 2除法运算符执行整数除法,除非你告诉它它是一个浮点数。

如果您更改为x ** 2 / 2.0,您将获得正确的答案,例如wolfram alfa。

答案 3 :(得分:0)

当你将整数除以整数时,Python 2将舍入为整数,因此当你除以得到正确的结果时,请使用一个浮点数(即2.0

import math

def function(x):
    y = math.cos(x**2/2.0)/(math.log(x+2,2))
    return y

print function(1)