Не рубите с плеча — ну некуда задать вопрос подобного плана.
В принципе здась решает опыт программирования.
Сам вопрос:
функция возвращает значение Res:
real(8) function Minimize(xbeg, eps, over)
...
Res = HJmin(nPar, MainEnergy, Par, eps)
Minimize = Res
end
в отладчике (MS VisualStudio 6.0) оно видно нормально.
Но дальше при возврате в "родительскую" функцию
...
real(8) MinEnrg
...
MinEnrg = Minimize(Params, eps, over)
print (*), 'Min energy = ',MinEnrg
получаю фигню
Все другие функции в других случаях возвращают все правильно.
В чем может быть дело?
14.06.05 16:15: Перенесено модератором из 'C/C++' — Павел Кузнецов
Здравствуйте, Аноним, Вы писали:
А>Не рубите с плеча — ну некуда задать вопрос подобного плана.
А>В принципе здась решает опыт программирования.
А>Сам вопрос:
А> функция возвращает значение Res:
А>А>real*8 function Minimize(xbeg, eps, over)
А> ...
А> Res = HJmin(nPar, MainEnergy, Par, eps)
А> Minimize = Res
А>end
А>
А> в отладчике (MS VisualStudio 6.0) оно видно нормально.
А>Но дальше при возврате в "родительскую" функцию
А>А> ...
А>real*8 MinEnrg
А> ...
А> MinEnrg = Minimize(Params, eps, over)
А> print (*), 'Min energy = ',MinEnrg
А>
А> получаю фигню
А>Все другие функции в других случаях возвращают все правильно.
А>В чем может быть дело?
Исправления выделены жирным.
REAL(8) — объявление массива из 8 элементов.
Все, разобрался!
Просто нужно было явно описать интерфейс функции Minimize в той процедуре, где Minimize вызывается:
interface
real(8) function Minimize(xbeg, eps, over)
use shareddata
real(8) xbeg(nPar), eps, over
end function
end interface
Извините за вторжение в форум
Здравствуйте, Аноним, Вы писали:
А>Все, разобрался!
А>Просто нужно было явно описать интерфейс функции Minimize в той процедуре, где Minimize вызывается:
А>А> interface
А> real(8) function Minimize(xbeg, eps, over)
А> use shareddata
А> real(8) xbeg(nPar), eps, over
А> end function
А> end interface
А>
А>Извините за вторжение в форум
На самом деле даже интерфейсность не причем. Нужно просто ВСЕГДА описывать типы данных а не полагаться на умолчания.
То есть вначале блока — IMPLICIT NONE после чего компилятор будет слушать с открытым ртом и глупых предположений не делать. А то онг увидел что Minizize на M начинается и решил что она — целое (а не вещественное)число, а не ф-ия.
получилась каша.
И еще. Лучше писать real(8) а не real*8 — потому что первое — спецификация точности, типа float/double а второе указание РАЗМЕРА занимаемого переменной. На других системах double не обязательно 8. может быть 4 или 16
А real(8) — это всегда двойная точность.
ВОт.
Здравствуйте, Sasparella, Вы писали:
S>И еще. Лучше писать real(8) а не real*8 — потому что первое — спецификация точности, типа float/double а второе указание РАЗМЕРА занимаемого переменной. На других системах double не обязательно 8. может быть 4 или 16
Покопавшись в оставшихся от прошлого материалах по Фортрану, я не нашел таких объявлений. Такой стиль очень похож на PL/1. Не подкинете ссылку или книжку?