Одно и то же уравнение на Fortran 95 и Python дает разные результаты - PullRequest
0 голосов
/ 22 мая 2018

В Фортране 95 есть уравнение для вычисления некоторой позиции для массива, я скопировал и вставил одно и то же уравнение в Python, но они возвращают разные результаты.

РЕДАКТИРОВАТЬ: в спешке за ответ, я забыл показать объявления переменных, но они сейчас находятся в примере кода на Фортране.И оказывается, что объявление было проблемой, благодаря @SurestTexas и @albert за то, что они указали на это в комментариях, и всем, кто помог.

Уравнение в Фортране:

integer(2) :: i, j
integer(4) :: e, n_x
n_x = 1162
j = ((-2.8 - (-8.4)) / 0.05) + 1
i = ((-4.5 - (-5.1)) / 0.05) + 1 
e = ((i-1)*n_x+j)

Я печатаю e, что приводит к: 12894

И в Python:

n_x = 1162
j = ((-2.8 - (-8.4)) / 0.05) + 1
i = ((-4.5 - (-5.1)) / 0.05) + 1 
e = ((i-1)*n_x+j)

Я печатаю e, что приводит к: 14057.0

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

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

дополнение :

Интересно, что в Python 3.5.3 e печатается как 14056.99999999999.

Неявное утверждение none используется для блокировки очень старой функции Fortran, котораяПо умолчанию все переменные, начинающиеся с букв i, j, k, l, m и n, рассматриваются как целые числа, а все остальные переменные - как реальные аргументы.

Я не могу комментировать из-за недостаточной репутации, поэтомупоместите это в Ответе как отчет моего исследования.

0 голосов
/ 22 мая 2018

Вспоминая мой Фортран.Я думаю, что предполагается, что тип данных основан на первой букве переменной, в partilar i и j были бы целыми числами. Так что, чтобы смоделировать это в Python, я сделал:

n_x = 1162
j = int(((-2.8 - (-8.4)) / 0.05) + 1)
i = int(((-4.5 - (-5.1)) / 0.05) + 1 )
e = ((i-1)*n_x+j)

, что дало мне 12895

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...