У меня возникла проблема, когда я использую функцию int()
. У меня есть реальный массив mEL
, и я хочу преобразовать некоторые его компоненты в целые числа для сравнения с реальным массивом COORDS
. Я должен использовать int()
из-за ошибок округления в COORDS
массиве, поэтому ZERO
не совсем ноль 3.D-77
или аналогичный:Функция int() в Fortran 77
DO I = 1,nLines
IF (int(mEL(I,1)).EQ.int(COORDS(1,1)) .AND.
1 int(mEL(I,2)).EQ.int(COORDS(2,1)) .AND.
2 int(mEL(I,3)).EQ.int(COORDS(3,1))) THEN
.....do something
Проблема в том, что во время бега исход int(COORDS(1,1))
изменений, но значение COORDS(1,1)
является одна и та же. Например:
COORDS(1,1) = 1829.0000000
В течение 1000 прогонов я получаю int(COORDS(1,1))=1829
. Однако после некоторых пробегов я получаю: int(COORDS(1,1))=1828
! но COORDS(1,1)=1829
!
Любые идеи, почему это происходит?
Вы действительно хотите иметь такую большую приемлемую разницу между этими двумя значениями? –
Нет, я не хочу. Вот почему я хочу этого избежать. Проблема в том, что int (COORDS (1,1)) иногда равен 1828, но COORDS (1,1) составляет 1829.0000, поэтому я ожидал, что int (COORDS (1,1)) будет 1829 ... – jpcgandre
Well 'int' усекает, поэтому возможно, что если' coords (1,1) 'равно (приблизительно)' 1828.9999999999', тогда он будет отображаться (по некоторым параметрам форматирования) как '1829.0000000' или даже как' 1829', но усекать (правильно) до '1828'. Ничто из того, что вы нам сказали, исключает эту возможность. Является ли 'coords (1,1)' обновленным во время прогона? –