Cтраница 3
Код / эсм, содержащий во всех разрядах 1, не используется. Он зарезервирован для указания на переполнение порядка или потерю значимости мантиссы ( q - Q), при этом положительное и отрицательное переполнения идентифицируются соответственно положительной и отрицательной мантиссами, содержащими в обоих случаях 1 во всех цифровых разрядах. Указанием на потерю значимости мантиссы служит отрицательность мантиссы с 0 во всех цифровых разрядах. При нулевых кодах порядка и мантиссы представляемое число полагается равным нулю. [31]
Аппаратура ЭВМ семейства CDC вызывает раздражение из-за плохого качества арифметики. В частности, она не обеспечивает немедленного предупреждения о переполнении, потере значимости и порядка, позволяя продолжать вычисления, используя неопределенные, бесконечные и другие бессмысленные значения. Невыявленные ошибки такого рода оказывают существенное влияние на надежность численных расчетов. [32]
Мантисса, равная нулю, не может быть нормализована. Случаи возникновения таких мантисс в результате выполнения операций сложения и вычитания, классифицируемые как потеря значимости, автоматически обнаруживаются в процессорах. При этом нормализация не производится, а вырабатывается требование прерывания. [33]
Часть программных прерываний может маскироваться. К ним относятся переполнение с фиксированной запятой, десятичное переполнение, исчезновение порядка, потеря значимости в операциях с плавающей запятой. [34]
В основных программах содержатся ошибки, которые приводят к переполнению разрядной сетки вычислителя, потере значимости или выходу адресов за пределы назначенных областей. Такого рода ситуации улавливаются аппаратурой вычислителя, и супервизор извещается об обнаружении ошибки в программе. Прерывание по ошибке останавливает выполнение основной программы и для локализации причин возникновения ошибки включается в работу специальная обслуживающая программа. Данная обслуживающая программа анализирует информацию, зафиксированную в памяти на момент возникновения ошибки, классифицирует ошибку и формирует сообщение о причинах остановки основной программы. Указанное сообщение посылается через устройство вывода оператору системы, и основная программа исключается из списка выполняемых работ. [35]
Ошибки данного класса содержатся в закодированных математических выражениях или в получаемых с их помощью результатах. Примерами ошибок, относящихся к данному классу, являются неверное преобразование типов переменных, неверный знак операции, ошибка в выражении индекса, переполнение или потеря значимости при вычислениях. [36]
Всего имеется 15 кодов программных прерываний, которые запоминаются в PSW и по которым ОС определяет причину прерывания. Эти коды приведены в табл. 1.2. Некоторые виды прерывания, такие как переполнение с фиксированной точкой ФП, десятичное переполнение ДП, исчезновение порядка И и потеря значимости ЗН, могут быть замаскированы с помощью маски программы, которая устанавливается в нулевое состояние. Тогда в случае появления программной ошибки прерывание не происходит. В табл. 1.2 показано, как заканчивается работа каждой команды в случае появления программного прерывания: команда совсем не выполняется, завершается или прекращается в какой-то момент времени. [37]
Программные прерывания возникают при появлении ошибок во время выполнения программы. Причинами программных прерываний являются деление на нуль с фиксированной и плавающей запятой, переполнение, исчезновение порядка, выполнение привилегированных команд в проблемной программе, неправильная адресация, нарушение защиты памяти, неправильная операция, ошибка в данных, ошибка в спецификации, десятичное переполнение, деление на нуль в десятичной системе, переполнение порядка, потеря значимости мантиссы. [38]
Если некоторый бит маски равен 1, соответствующий особыйг случай вызывает прерывание. Если бит маски равен 0, прерывание не происходит. Бит потери значимости в маске, кроме того, определяет, как завершается выполнение сложения и вычитания с плавающей запятой. [39]
Код / эсм, содержащий во всех разрядах 1, не используется. Он зарезервирован для указания на переполнение порядка или потерю значимости мантиссы ( q - Q), при этом положительное и отрицательное переполнения идентифицируются соответственно положительной и отрицательной мантиссами, содержащими в обоих случаях 1 во всех цифровых разрядах. Указанием на потерю значимости мантиссы служит отрицательность мантиссы с 0 во всех цифровых разрядах. При нулевых кодах порядка и мантиссы представляемое число полагается равным нулю. [40]
Такое явление называется потерей значимости. В длительных вычислениях результат может вообще не иметь верных значащих цифр. В расчетах, где возможна непредсказуемая потеря значимости, необходимо организовать программный контроль за точностью вычислений. Одним из способов может быть параллельное выполнение действий с нормализацией и без нормализации. Проверяя число старших нулевых цифр в мантиссе ненормализованного результата, можно определить точность производимых расчетов. [41]
Если некоторый бит маски равен 1, то соответствующий особый случай вызывает прерывание. Если бит маски равен 0, прерывание не происходит. Бит маски, относящийся к потере значимости, кроме того, определяет, как завершается выполнение сложения и вычитания с плавающей точкой. [42]
Согласно стандарту IEEE потеря значимости должна быть плавной, то есть исчезающе малые значения представляются с помощью минимального отрицательного порядка и минимальной точности, если это возможно. В таком режиме может ускоряться выполнение программы. В Фортране 2003 добавлена возможность определения режима потери значимости и его изменения на тех системах, которые это допускают. [43]
Ошибки, допущенные при составлении программы, могут привести к возникновению программных прерываний. Сущест-вуют 12 причин, которые могут вызвать программные прерывания при выполнении рабочей программы Фортрана. Три причины ( переполнение с фиксированной точкой, десятичное переполнение и потеря значимости) замаскированы. В этих случаях рабочая программа Фортрана не реагирует на ошибки. [44]
Число с нулевой характеристикой, нулевой мантиссой и положительным знаком называется истинным нулем. Он может появиться в результате арифметической операции при определенных величинах операндов. Как было отмечено в предыдущем параграфе, результат операции может быть также принудительно сделан равным истинному нулю, если имеет место исчезновение порядка ( в результате операции получилась характеристика, меньшая нуля) или если мантисса результата равна нулю, и не предусмотрено прерывание исполняемой программы при потере значимости. [45]