2015-03-18 4 views
1

Как Python вычисляет тригонометрические функции? Я пытаюсь вычислить с помощьюРасчет тригонометрических функций в python

x = ((0.1-0.001)/2)*math.sin(((1/20)*math.pi*20)+(0.5*math.pi*1))+((0.1-0.001)/2)+0.001 

Я получаю

x = 0.1 

почему? в обычном калькуляторе (радиан) я получаю 0.001

+0

Расчеты в радианах, чувак. – ForceBru

+0

Вы используете это на python 2? В python 3 я получаю правильный результат, проблема заключается в том, как выполняется округление, добавив это перед вычислением 'from __future__ import division' – EdChum

+0

, пытались ли вы оценить подвыражения? –

ответ

4

В Python 2 / является целочисленным делением, вам нужно импортировать __future__ .division для плавучего разделения:

>>> from __future__ import division 
>>> import math 
>>> x = ((0.1-0.001)/2)*math.sin(((1/20)*math.pi*20)+(0.5*math.pi*1))+((0.1-0.001)/2)+0.001 
>>> x 
0.001 
+2

«Вам нужно импортировать' __future__ .division'. Зачем? – Kevin

+0

вот и все! не знал, что мне нужно импортировать это спасибо! – tafelrunde

+0

Python 2 отличает целые числа по умолчанию при делении целых чисел. Python 3 не делает этого, поэтому мы можем импортировать эту функцию с плавающей запятой. –

3

В , python takes the floor of integer division. Таким образом, вам нужно импортировать division из библиотеки __future__ в верхней части вашей программы.

from __future__ import division 
x = ((0.1-0.001)/2)*math.sin(((1/20)*math.pi*20)+(0.5*math.pi*1))+((0.1-0.001)/2)+0.001 
print x 
+2

Альтернативный способ - указать поплавки, когда вы хотите получить результат поплавка. Итак, '1/20' становится' 1.0/20.0' (или '1./20.' или' 1./20'). (Я сделал ответ на этот вопрос.) Возможно, вы захотите изменить «divsion rounds python» на «раунды python * integer * division». На самом деле «раунды» тоже не совсем правильные. Он берет слово. –

+0

@StevenRumbalski, что в моем ответе говорит –

+0

Фактически только один операнд должен быть плавающим –

1

Просто сделать ваши целые числа, такие, как 2 поплавок 2.0, иначе Python 2.x использует целочисленное деление, также известный как деления с (округление в сторону минус бесконечности, например -9/8 дает -2, 9/8 дает 1), при делении целые числа от других целых чисел (будь то простые или длинные):

x = ((0.1-0.001)/2.0)*math.sin(((1/20.0)*math.pi*20)+(0.5*math.pi*1))+((0.1-0.001)/2.0)+0.001 

и:

print x 
0.001 
Смежные вопросы