Re: Ошибка в Рефал-5


Subject: Re: Ошибка в Рефал-5
From: Leonid Belous (belous@ilt.kharkov.ua)
Date: Wed Nov 12 2003 - 19:43:54 MSK


> Поддерживается ли в настоящее время Рефал-5 вообще идистрибутив
ftp://ftp.botik.ru/pub/local/scp/refal5/ref5_000925.zipв частности?

Уважаемый А.А.Владимиров,

Этот вопрос уже поднимался на этой конференции
http://www.botik.ru/mail-archive/refal/0258.html
и ответы на него можно посмотреть здесь
http://www.botik.ru/mail-archive/refal/0259.html
http://www.botik.ru/mail-archive/refal/0260.html

К сожалению, с того времени ситуация не изменилась в лучшую сторону :(.

> Вопрос не праздный, ибо файл arithm.c вышеупомянутого архивасодержит
грубую ошибку, а именно: в строке 637 вместоправильного оператора x = k %
MAX_SHORT стоит оператор x = k.Данная "мелочь" приводит к тому, что средние
разрядыпроизведения многозначных (в смысле макроцифр) чиселоказываются,
вообще говоря, далеки от реальности.
> В качестве примера можно привести операции
> <Mul (5510 725908503 2714696811 3558488906 2579862466) 54333205256691
396761401 3151792086 1004175019 0>
> и
> <Mul (5510 725908503 2714696811 3558488906 2579862466) 54333205256691
396761401 3151792086 1004175018 4294967295>.
> Результат этих операций наглядно показывает, что при УМЕНЬШЕНИИодного из
сомножителей на единицу "произведение" может чудеснымобразом УВЕЛИЧИВАТЬСЯ.

Спасибо за локализацию ошибки.
Поведение зависит еще от конкретной платформы.
Я попробовал ваш второй пример в чуть усложненном контексте. Добавил
операцию Sub и исследовал разницу исходного и измененного чисел. Заодно
выводил значения этих чисел. У меня получилось, что при увеличении последней
цифры на единицу (5 заменил на 6), результат уменьшился
(см. snapshot с моего экрана
http://www.refal.org/~belous/download/for_vladimirov.jpg ).

Произвольно-разрядная арифметика в Рефале-5, насколько я знаю, не проходила
испытаний на реальных задачах с длинными числами (более одной макроцифры).
Арифметика же типа real, которая была в языке ранее, исключена в последней
реализации Рефала-5.

Лично я считаю Рефал-5 достаточно стабильной и отлаженной системой. Из
подобных ситуаций выхожу через интерфейс с PHP. Например, в системе
Refal-PHP произвольно-разрядная арифметика типа real доступна из Рефала-5
следующим образом
http://www.refal.net/~belous/rphprdoc.htm#2.5.%20Вычисление%20математических%20функций

Еще раз спасибо за точное место указания ошибки. Надеюсь, что в очередном
дистрибутиве Рефала-5 эта ошибка будет исправлена.

С уважением,
--Леонид Белоус

>
----- Исходное сообщение -----
От: "A.A.Vladimirov" <vladimi@mech.math.msu.su>
Кому: <refal@botik.ru>
Отправлено: 11 ноября 2003 г. 11:54
Тема: Ошибка в Рефал-5



This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:24:59 MSD