2014-02-11 3 views
-2

У меня есть сценарий со следующими утверждениями:Python вычисляет математическое выражение неправильно

Me = 5.97219E+24 
Ms = 1.9891E+30 
ae = 149597887155 
r = ae*((Me/Ms)**(2/5)) 

После запуска скрипта, переменная r имеет такое же значение, 149597887155, которая является такой же, как ae. Это, очевидно, не значение, которое я ожидал бы после оценки выражения.

Я попытался перезагрузить свой компьютер, запустив новый интерпретатор Python и даже установив другой дистрибутив Python. Это тот же результат в каждом случае.

В настоящее время я использую Anaconda с Python 2.7 и Spyder в качестве редактора.

Любопытно, что при копировании и вставке операторов в интерпретатор напрямую они оцениваются правильно.

Звучит это знакомо кому-либо? Есть ли известная причина для этого?

+0

'2/5' является' 0'. Используйте '2.0/5.0'. Когда вы «копируете и вставляете инструкции в интерпретатор напрямую», вы используете python 3? – geoffspear

+0

Любое число, поднятое до 0-й степени == 1, и любое число раз 1. Следовательно, 'ae == r' – SethMMorton

ответ

1

Хорошо в Python 2.7, 2/5 - целочисленное деление, в результате чего получается 0. Все, что питается от 0, равно 1, это означает, что конечный результат для r равен ae * 1.

В Python 3.3, 2/5 результат в 0.4 и, вероятно, дает ожидаемый результат.

Что касается разницы в консоли: у меня нет различий.

+0

Большое спасибо за объяснение! Теперь это кажется очень очевидным. Если бы я попытался найти это самостоятельно, это заняло бы много времени. – user1984653

Смежные вопросы