Предотвратить чрезмерное или недостаточное - PullRequest
1 голос
/ 05 октября 2011

Я звоню gges и хочу получить собственные значения. В примечаниях по применению я прочитал этот отказ от ответственности:

Коэффициенты alphar (j) / beta (j) и alphai (j) / beta (j) могут легко превышать или понижать, а beta (j) может даже равняться нулю. Таким образом, вы должны избегать простого вычисления отношения. Однако alphar и alphai всегда будут меньше и обычно сопоставимы с нормой (A) по величине, а beta всегда меньше и обычно сопоставимы с нормой (B).

Я хочу предотвратить переполнение или недостаточное заполнение и остановить программу с ошибкой:

do i=1,N
    if (sometest(alphar(i), beta(i)) then
        stop 'Eigenvalues over- or underflow!'
    endif
    Lambda(i) = alphar(i)/beta(i)
enddo

Заранее спасибо

1 Ответ

1 голос
/ 05 октября 2011

Переполнение означало бы, что результат больше, чем огромный, таким образом, иногда может быть:

abs(alphar(i)) > abs(beta(i))*huge(alphar(i))

Для недостаточного результата результат будет меньше, чем крошечный, таким образом, иногда может быть:

abs(alphar(i)) < abs(beta(i))*tiny(alphar(i))

огромные и крошечные являются внутренними функциями.

Редактировать: На самом деле, если подумать, тестирование на переполнение может быть не таким хорошим, поскольку само умножение приводит к переполнению, если abs (beta (i)) больше 1. Таким образом, вам нужно это зафиксировать. Вы можете выполнить тест на переполнение только, если бета-версия меньше 1, а тест на переполнение - только если он меньше 1.

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