Coding of Computer Methods for Mathematical Computation

Posted 6 years ago by SuperAdmin

Коментари за кодиране

Оригиналният първичен код за книгата Компютърни Методи за Математически Изчисленияот Forsythe, Malcolm и Moler е разработен преди пускането на стандарта Fortran 77. Следните бележки обобщават промените, направени в оригиналната библиотека преди Фортран 77, които го превръщат в съвремения Fortran.

 

  • Всички рутинни процедури се състоят от Essential Lahey Fortran (ELF). Това изисква да няма имплицитно типизиране, да се декларира намерението на всички процедурни аргументи, да не се използват остарели контролни изрази, да не се използват изявления COMMON или EQUIVALENCE и да се зачитат многобройни изисквания на ELF за синтаксиса. Те също така съставят без предупреждения със строг флаг Фортран-95 с gfortran и g95.
  • Като аргументи не се приемат никакви измерения. Вътрешната функция SIZE се използва от всички процедури за определяне на размера на векторите и матриците.
  • Всички DO-цикли се преобразуват в DO-END DO без номера на изявленията. CYCLE и EXIT се използват за навигация с цикли. Веригите, които броят сега, използват третия аргумент от -1 за понижаване.
  • В библиотеката няма извлечения за вход или изход. Всички процедури, при които има предупредителни съобщения, сега имат променливи на кода на грешката, които сигнализират за грешни условия
  • Има единични и двойни версии на всички процедури. Има изрази на MODULE INTERFACE, които позволяват да се използва същото име на подпрограмата, независимо от избраната точност.
  • Не съм извършил това, което може да се нарече “агресивно” прекодиране на по-стария Фортран код. По-конкретно, все още съществуват изявления за GO TO и редица цикли могат все още да бъдат преобразувани в масивни нотации или вътрешни продуктови конструкции.
  • Ако сте изучили кодовете в Numerical Recipes във Fortran 90 , ще видите многобройни случаи на външни, разпространение, суап, imaxloc и други конструкции, които могат да съкратят кода и евентуално да го направят по-ефективен, но за сметка на изискването за използване на пакет от полезни процедури. Аз избрах да избегна това.
  • Избегхах всички изкушения за “подобряване” на самите числови алгоритми. Трябва да получите същите цифрови стойности като оригиналното кодиране.
  • Режимите Zeroin и Fmin са прекодирани с аргументи за допълнителен контрол. Оригиналните функции Zeroin и Fmin все още са включени като обвивки за новите подпрограми BrentZero и BrentMin.
  • Оригиналната библиотека включва преносим генератор за случайни номера. Тъй като сега съществува стандарт във вътрешността на Фортран, пропуснах тази функция.
  • Оригиналната библиотека е написана изцяло с главни букви и авторите са по-скоро привързани към горната буква L като индекс. Променливите сега са с малки букви и аз лично се отвращавам от малката буква “l” като индекс, поради приликата й с числото едно и главната буква. Аз премахнах почти всички такива вероятности.

Едно чудесно премущество на оригиналния код бе, че оригиналните автори не поставят ограничения върху разпространението на кода и може да бъде изтеглен от Netlib . Декларирам, че цялата моя добавена стойност към библиотеката е допринесла за публичния домейн.

 

Bookmark the permalink.