Одна единственная функция, похоже, не компилирует [дубликат]

SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20;

Это более эффективно, так как не нужно сортировать таблицу.

1
задан Vladimir F 17 October 2016 в 20:07
поделиться

1 ответ

Вы не можете поместить строки как

  double precision f, fprime

в подпрограмму newtonbisection. Это означает, что f и fprime будут внешними функциями, но они не являются, они являются внутренними функциями основной программы.

Удалите эту строку. Там нет места, внутренние функции видят другие функции из-за так называемой ассоциации хоста , все они содержатся в одной хост-программе.

Кроме того, внутренние функции и подпрограммы не требуют повторения implicit none, implicit none из основной программы в них действителен, потому что они содержатся в нем.

2
ответ дан Vladimir F 17 August 2018 в 10:07
поделиться
  • 1
    Ах я вижу. Спасибо. Это правда, мне не нужна эта линия. После удаления строки он компилируется в порядке, но теперь он попадает в бесконечный цикл. Я сомневаюсь, что это из-за строки if (p < a .or. p > b) then. Я хотел иметь случай, когда p выходит за границу [a, b]. Я никогда не использовал & quot; или & quot; в fortran-программировании раньше, но от googling это кажется правильным. Это верно? – mike 17 October 2016 в 20:19
  • 2
    Это новая проблема и требует нового вопроса. Постарайтесь немного сыграть с кодом, и если у вас все еще есть проблема, задайте новый вопрос. – Vladimir F 17 October 2016 в 20:20
  • 3
    Хорошо, я сделаю. Спасибо. – mike 17 October 2016 в 20:26
  • 4
    Я исправил проблему, избавившись от dabs. Это должно быть только fp < tol. Я думаю, .OR. - правильный способ использования логических операторов в Fortran – mike 17 October 2016 в 20:41
  • 5
    Я не знаю, как я сказал, если вам нужна помощь в этом, задайте новый вопрос. BTW, dabs является уродливым, используйте только abs. – Vladimir F 17 October 2016 в 20:47
Другие вопросы по тегам:

Похожие вопросы: