spamsink: (Default)
[personal profile] spamsink
В былые времена символов в кодировках было немного, и поэтому, хотя в байте уже было 8 бит, о возможности наличия байтов с установленным старшим битом в нормальных человеческих текстовых строках (а не, скажем, в сжатом представлении) никто не заботился. От этого, как говорится, байты с установленным старшим битом служили неиссякаемым источником лулзов.

В приведенной программе подчеркивание внутри строк аналогично символу обратной косой черты в языке Си. Тип ALFA - массив символов, умещающийся ровно в одно машинное слово.


 00001    1  0  PROGRAM MAIN(OUTPUT);
 00001    2  1  VAR A,B,C:ALFA;
 00007    3  2  BEGIN
 00010    4  2  A := ’_000_000_000_000_000_000’;
 00011    5  2  B := ’_200_000_000_000_000_000’;
 00012    6  2  C := ’_177_177_177_177_177_177’;
 00013    7  2  WRITELN(A > B, B > C, C > A);
 00050    8  0  END.
           *EXECUTE
    TRUE    TRUE    TRUE


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

В качестве задания со звездочкой предлагается подумать, как могла была быть устроена система команд, приводящая к такому парадоксальному результату.

Date: 2017-08-18 02:02 pm (UTC)
sab123: (Default)
From: [personal profile] sab123
Ну, это похоже последствия наличия только плавающей арифметики. Но все равно непонятно, как именно. Хотя может там есть некий аналог NaN, сравнения с которым всегда возвращают истину?

Кстати, а как они без целой арифметики вычисляли смещения в массивах?
Page generated Jan. 20th, 2019 09:48 am
Powered by Dreamwidth Studios