Difference between revisions of "Cmp long double"

From EjudgeWiki
 
Line 1: Line 1:
 
Проверяющая программа cmp_long_double сравнивает вещественное значение расширенной точности в файле результата работы тестируемой программы с вещественным значением расширенной точности в файле эталонного ответа. С помощью переменных окружения EPS и ABSOLUTE можно управлять точностью и режимом сравнения чисел.
 
Проверяющая программа cmp_long_double сравнивает вещественное значение расширенной точности в файле результата работы тестируемой программы с вещественным значением расширенной точности в файле эталонного ответа. С помощью переменных окружения EPS и ABSOLUTE можно управлять точностью и режимом сравнения чисел.
  
Вещественное число должно быть единственным элементом данных в файле результата работы программы. Кроме записи вещественного числа в файле могут находиться только пробельные символы. Если кроме вещественного числа в файле результата работы тестируемой программы находятся другие непробельные символы, проверяющая программа диагностирует [[ошибка неправильного формата результата|ошибку неправильного формата результата]].
+
Файл результата работы программы должен быть [[текстовый файл|текстовым файлом]]. Запись вещественного числа должна
 +
быть единственным [[элемент ввода|элементом ввода]], то есть кроме записи вещественного числа в файле могут находиться только пробельные символы. При нарушении этих условий проверяющая программа диагностирует [[ошибка неправильного формата результата|ошибку неправильного формата результата]].
  
Если кроме записи вещественного числа в файле эталонного ответа находятся другие непробельные символы, проверяющая программа диагностирует [[внутренняя ошибка проверки|внутренюю ошибку проверки]].
+
Файл эталонного ответа также должен быть текстовым файлом и содержать единственный элемент ввода. При нарушении этих условий проверяющая программа диагностирует [[внутренняя ошибка проверки|внутренюю ошибку проверки]].
  
 
Вещественное число должно быть записано по [[правила записи вещественных чисел|правилам записи вещественных чисел]]. Если это условие не выполняется в файле результата работы программы, проверяющая программа диагностирует [[ошибка неправильного формата результата|ошибку неправильного формата результата]].
 
Вещественное число должно быть записано по [[правила записи вещественных чисел|правилам записи вещественных чисел]]. Если это условие не выполняется в файле результата работы программы, проверяющая программа диагностирует [[ошибка неправильного формата результата|ошибку неправильного формата результата]].

Revision as of 10:20, 27 November 2006

Проверяющая программа cmp_long_double сравнивает вещественное значение расширенной точности в файле результата работы тестируемой программы с вещественным значением расширенной точности в файле эталонного ответа. С помощью переменных окружения EPS и ABSOLUTE можно управлять точностью и режимом сравнения чисел.

Файл результата работы программы должен быть текстовым файлом. Запись вещественного числа должна быть единственным элементом ввода, то есть кроме записи вещественного числа в файле могут находиться только пробельные символы. При нарушении этих условий проверяющая программа диагностирует ошибку неправильного формата результата.

Файл эталонного ответа также должен быть текстовым файлом и содержать единственный элемент ввода. При нарушении этих условий проверяющая программа диагностирует внутренюю ошибку проверки.

Вещественное число должно быть записано по правилам записи вещественных чисел. Если это условие не выполняется в файле результата работы программы, проверяющая программа диагностирует ошибку неправильного формата результата. Если это условие не выполняется в файле эталонного ответа, проверяющая программа диагностирует внутренюю ошибку проверки.

Если значение в файле эталонного ответа является специальным вещественным значением NaN, +Inf, -Inf, значение в файле результата работы тестируемой программы должно быть таким же (NaN, +Inf, -Inf соответственно). В противном случае диагностируется неправильный ответ.

Если значение в файле эталонного ответа не является специальным вещественным значением, а значение в файле результата работы программы — является, диагностируется неправильный ответ.

Вещественное значение из файла результата и вещественное значение из файла эталонного ответа считываются в переменные типа long double (80-битные вещественные значения раширенной точности).

Погрешность сравнения устанавливается переменной окружения EPS. Если такая переменная окружения не установлена, её значение не является вещественным числом, или её значение не меньше 1, проверяющая программа диагностирует внутренюю ошибку проверки. Во всех операциях сравнения, описываемых ниже, используется не значение EPS, а значение EPS1, которое вычисляется как 1.1*EPS.

Для "нормальных" вещественных значений поддерживаются два режима сравнения вещественных чисел:

  • режим абсолютной погрешности
  • режим относительной погрешности

Режим относительной погрешности установлен по умолчанию. В этом режиме сравнение ведется следующим образом:

  • если оба значения по модулю меньше 1, то их разность по модулю должна быть меньше EPS1. В противном случае диагностируется неправильный ответ.
  • если числа имеют разные знаки, диагностируется неправильный ответ.
  • если двоичные порядки чисел отличаются больше чем на 1, диагностируется неправильный ответ.
  • оба числа нормируются, то есть их двоичные порядки уменьшаются на значение меньшего двоичного порядка из двух чисел. В результате получится одно число с двоичным порядком 0, другое число с двоичным порядком 0 или 1. Если разность этих чисел по модулю не меньше EPS1, диагностируется неправильный ответ.

Итак, в режиме относительной погрешности переменная окружения EPS задаёт количество верных десятичных знаков в ответе.

Режим абсолютной погрешности устанавливается, если задана переменная окружения ABSOLUTE. Значение этой переменной может быть произвольным. В режиме абсолютной погрешности модуль разности двух чисел должен быть не больше EPS1. В противном случае диагностируется неправильный ответ.