Вестник МГТУ, 2023, Т. 26, № 1.
Васильева Ж. В. и др. Анализ неточностей и несоответствий в актуальной редакции стандарта. В строке 250 вычисляется начальное значение величины tcl (в кельвинах), что является первым важным фактом, свидетельствующим об "итерационных вычислениях", который не следует ни из указанных в стандарте формул (1)-(4), ни из текста основной части документа. Необходимо также обратить внимание, что в формулах (1)-(4) стандарта используется значение в градусах Цельсия, важно не запутаться между величинами в градусах Цельсия и тех же величинах в кельвинах. В строках 260-300 выполняются предварительные вычисления вспомогательных величин P1-P5. В выражениях фигурируют части формулы (2) стандарта, в частности коэффициенты 3,96; 0,028 и произведение Id 'fci, которые встречаются только в формуле (2). В строке 380 эти коэффициенты используются в выражении для вычисления очередного приближения величины tcl ; таким образом, можно сделать вывод о том, что в строках 260-300 в качестве основы использована формула (2). Однако строки 260-300, 380 содержат ошибки, и результат вычислений по выражению, указанному в строке 380, не соответствует тому, который должен получаться в результате вычислений по формуле (2). Причем количество накопленных ошибок в этих строках, вероятно, велико, поэтому мы не смогли восстановить логику разделения формулы (2) на коэффициенты. Авторы первоначальной программы разбили выражение на пять предварительно вычисляемых членов, предположительно, для ускорения расчетов, так как компьютеры во время ее разработки считали очень медленно и при программировании ранних версий BASIC использовались в том числе и такие приемы. Строки 260-300 мы удалили из программы, а для вычисления tct просто записали выражение, соответствующее формуле (2). В удаленных строках 260-290 фигурирует неверный перевод комментария "Сalculatюn term": этот комментарий означает не "период вычисления", а "вычисление терма" (члена, вспомогательной величины). Переменные XF и XN используются как очередные приближенные значения величины t ci. Перед входом в цикл значения величин равны. В цикле вычисляется по формуле (2) новое значение XN (строка 380), при этом в качестве текущего значения tci используется XF , затем для следующей итерации значение XF уточняется как среднее между текущим значение XF и найденным значением X N (строка 350). Вычисления повторяются до тех пор, пока разница между новым и предыдущим значениями tci (XN и XF ) не будет превышать заданной точности. Если требуемая точность не будет достигнута за 150 итераций, цикл завершается, но значение PMV считается ненайденным. Это вторая часть недостающего "итерационного метода". Величины XF и X N содержат не температуру tcl, а температуру, уменьшенную в сто раз (строка 310). В соответствии с этим написана формула в строке 360. Видимо, в формуле (2) этот факт также должен был учитываться, но формулу (2), как было указано выше, восстановить из исходной программы не удалось. Затем в строке 420 уменьшенное в сто раз значение восстанавливается до кельвинов и переводится в градусы Цельсия. Зачем авторы программы уменьшили значение переменных в сто раз в теле цикла, остается только предполагать. Мы не стали воспроизводить эту часть вычислений; в нашей программе итерационные значения tci соответствуют температуре в кельвинах. Соответствующим образом откорректированы строки 310, 360, 420; исправлена строка 340, потому что при увеличении величины в сто раз точность также нужно увеличить в сто раз, т. е. величину EPS взять меньшей на два порядка. В строке 440 пропущен знак арифметической операции между символами "1" и "(". По смыслу в этой строке вычисляется один из членов формулы (1), пропущенный символ - знак умножения. В строке 480 вычисляется один из членов формулы (1), в соответствии с формулой пропущен множитель 10-8, кроме того, количество открывающих скобок не равно количеству закрывающих скобок. В тексте программы отсутствует строка 490. По смыслу в этой строке должен вычисляться последний (шестой) член формулы (1), который следует назвать HL6. В программе переменная HL6 нигде не инициализируется, однако используется в правой части оператора присваивания в строке 520. В строках 570, 580, 590 перевода не были переведены выводимые на экран сообщения. Выбранный нами интерпретатор не поддерживает форматированный вывод (директива USING), поэтому вывод в строках 580 и 590 неформатированный. Строки 600, 610, 620 не оказывают влияния на алгоритм и служат только для повторного запуска программы. Мы их убрали из предлагаемого откорректированного варианта как несущественные. Исправленный текст программы на языке BASIC для вычисления PMV и PPD приведен на рис. 4. Проверка авторами восстановленной программы на контрольных значениях табл. D. 1 (приложение D), показала совпадение значений PPD и PMV c контрольными показателями, предложенными стандартом, что подтверждает корректность выполненного восстановления программы. Встречающиеся расхождения значений в одну сотую определяются округлениями в процессе вычислений, которые в свою очередь зависят от порядка вычисления промежуточных величин [напомним, для формулы (2) этот порядок воспроизвести не удалось], и от используемого интерпретатора языка программирования. Пример расчета PMV и PPD с помощью откорректированной программы BASIC в https://yohan.es/swbasic приведен на рис. 5. При 50
Made with FlippingBook
RkJQdWJsaXNoZXIy MTUzNzYz