Ну вот простейший пример - двумерное уравнение теплопроводности (noufl):a1:proc options (main)reorder; dcl t(5000,5000) float static,(tm1,tm2) bin fixed(31); on error display('error step'||l); t=0;t(1,*),t(*,1)=1; n=5000; do l=1 to 10000; get string(time())list (tm1); dtm=0; do i=2 to n-1; do j=2 to n-1; t1=(t(i-1,j)+t(i+1,j)+t(i,j+1) +t(i,j-1))/4; dtm=max(dtm,abs(t1-t(i,j))); t(i,j)=t1; end; end; get string(time())list (tm2); display(l||dtm||(tm2-tm1)); end; put data (t); end a1; Завершается с ошибкой на 821-й итерации, при этом скорость счета из-за ошибок падает где-то с середины второй сотни. Вот трехмерное: (noufl):a1:proc options (main)reorder
( ... )
Если Вам интересно, могу как-либо выслать Вам более новую версию для WIndows. Это Rational Developer for Z. Версии от 7.5 до 9.1 сломанные. Там IDE Eclipse. Объем от 1,5 до 5 Гб.
Практической пользы, конечно, лично для меня немного, но из любви к прекрасному было бы очень интересно, если это для Вас не составит труда - киньте ссылку в личку или на почту therapsd собака yandex точка ru.
Comments 58
выражение a=a*b где а и b комплексны, считается неверно.
Reply
По мне хуже то, что underflow очень часто обрабатывает с ошибкой.
Reply
Reply
(noufl):a1:proc options (main)reorder;
dcl t(5000,5000) float static,(tm1,tm2) bin fixed(31);
on error display('error step'||l);
t=0;t(1,*),t(*,1)=1;
n=5000;
do l=1 to 10000;
get string(time())list (tm1);
dtm=0;
do i=2 to n-1;
do j=2 to n-1;
t1=(t(i-1,j)+t(i+1,j)+t(i,j+1)
+t(i,j-1))/4;
dtm=max(dtm,abs(t1-t(i,j)));
t(i,j)=t1;
end;
end;
get string(time())list (tm2);
display(l||dtm||(tm2-tm1));
end;
put data (t);
end a1;
Завершается с ошибкой на 821-й итерации, при этом скорость счета из-за ошибок падает где-то с середины второй сотни.
Вот трехмерное:
(noufl):a1:proc options (main)reorder ( ... )
Reply
Версии от 7.5 до 9.1 сломанные. Там IDE Eclipse. Объем от 1,5 до 5 Гб.
Reply
Reply
Reply
Reply
Leave a comment