В пещерах этого не было

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

    image

    Глава 0. Base-1


    Когда я учился в школе (199x) все сидели на Pascal – язык чёткий, мудрый, на нём даже Dos Navigator был написан c VESA скринсейверами, а позже The Bat!, и олимпиадники ACM ICPC в 2000-е годы были в основном паскалистами. Мне из-за любви к играм и графике в то время зашёл C/C++, и сразу же в глаза бросилось фундаментальное различие – от ноля или единицы индексируются массивы, это до сих пор приходится уточнять на том же hackerrank.com.

    Всё исходит из человеческой психологии, но не всё вовремя пересматривается. От единицы исторически в речи нумеруют по причине, каким был по счёту объект, когда он был добавлен – отсюда «первый», «второй» — т.е. сколько их стало после добавления. Но для компов это неудобно, т.к. проще оперировать смещениями – на сколько байт надо перепрыгнуть от базового адреса, поэтому «нулевой», «первый». Из-за этого паскалевские конструкции вида FOR I := 1 TO N DO A[I] := something излишне нагружают ALU либо превращаются в квест для компилятора.

    Есть еще один момент, где 1..N индексация даёт себя знать по сравнению с [0;N) индексацией – это работа с float’ами. Если требуется собрать несколько сегментов встык ala [a0;a1) U [a1;a2) U [a2;a3) – не возникает «магических чисел» вида a1+1, a2+1 – конец одного сегмента является началом следующего, и этот критерий работает что для целых, что для вещественных чисел. В 1..N нотации даже для целых начинаются плюс-минус-единицы, а для вещественных по идее вообще никак :) хотя на C++ есть лайфхак (int&)++floatVariable; или более рекомендуемый std::nextafter. Большинство off-by-one-errors и сопутствующих им buffer overrun происходит как раз из-за этого.

    Глава 1. Little-Big-Adventure


    image

    Сначала в пещерах были палочки/насечки, чтобы научиться считать и освоить базовую арифметику. Потом в Египте придумали концепцию нуля/ноля (back to the roots of 0-indexed). Дальше были римские числа – красивые/гламурные/винтажные, но деление, как я слышал, изучали на четвёртом курсе университетов.

    После этого цивилизация переключилась на порядковую систему передач — пришла с арабской стороны; десятичная, видимо, по количеству пальцев. Но вот незадача — у них по каким-то причинам пишут справа налево (об этом ниже), а импортировали as is, и с тех пор пишем числа от старшего разряда к младшему, хоть глазами и бегаем слева направо. При этом практически все операции выполняем от младшего к старшему – вспомните ручное сложение и умножение «в столбик» в тетрадке, справа налево. Единственная операция, которая требует ориентации слева направо – это сравнение (и деление, т.к. завязано на сравнение), но и там числа предварительно выравнивают по правому краю, подразумевая лидирующие нули слева.

    Теперь, собственно, к IT. Когда начали проектировать процессоры и программирование, недообдуманные человеческие привычки просочились в распайку транзисторов – возник big-endian (старший разряд в первых байтах). Потом было много холиваров о том, что это, мол, вопрос привычки и роли не играет. Роль это играет – в случае little-endian смещение байта соответствует степени 256-ки, которой он соответствует. Как человек, познакомившийся с x86 ассемблером на 8086 в ~10 лет, я до сих пор помню такие вещи как BL/BH/BX (позже EBX, еще позже RBX) – и когда надо кастануть 32-битный int в 8-битный, ALU вообще не требуется – это сугубо вопрос интерпретации, базовый адрес остаётся тем же. Поэтому работает такая штука, как «кармическое воздаяние» — моторолы, PowerPC и SPARC’и остались только в банковской сфере, с нормального рынка они повылетали даже после захода на XBOX/PS приставки. ARM тем временем старается угодить и тем, и другим, и тратит на это литографический бюджет – как-то endianness в нём переключается.

    Оттуда же у нас такие вещи как htonl и ntohl (host-to-network-long / network-to-host-long). Мотивируется всё это тем, что сисадминам в дремучие годы было психологически проще читать дампы, но мотивация, если честно, странная – если ты и так перепрошил свою биологическую нейронку c десятичной системы на шестнадцатеричную – для достижения полного дзэна достаточно всего одного шага на extended перепрошивку мозга в математически-естественный порядок младший->старший, по возрастанию адреса.

    И были холивары на эту тему, и кто-то даже прикололся в RFC с лилипутами Блефуску и нарисовал всё сверху вниз. Нюанс в том, что в компе это всё не симметрично. Речь не про лево/право или верх/низ – речь о том, идёт ли оно по возрастанию адреса или по убыванию. Когда выделяется память, мы оперируем адресом первого нулевого байта, а не последнего. Когда мы дёргаем malloc/realloc – отсчёт идёт со старта. Часто кэши работают как read-ahead и write-behind, особенно на механических HDD – т.е. упор идёт на возрастание адреса, симметрии с убыванием тут нет.

    Едем дальше. Когда речь идёт про «одноразовые» 8/16/32/64-битные числа – оно в принципе действительно не так уж важно и смахивает на холивар. Но бывает еще «длинная арифметика» в сотни цифр. При сложении можно в little-endian на ADD/ADC (x86) выехать, рассматривая куски длинного числа как 32/64-битные, т.е. при сложении число рассматривается как base-2^64, а при умножении, чтобы не переполниться, можно рассмотреть длинное число как, к примеру, base-2^8 – вопрос интерпретации — и никаких SIB выкрутасов для этого не потребуется, чтобы вертеть каждые 4 байта на ALU. В случае big-endian – welcome to hell.

    Глава 2. XYZ


    image

    Издревле люди не могли договориться, где лево, где право – до сих пор в 2020 это притча во языцех и классика жанра, особенно когда дело касается вождения. Кому-то ложку/вилку к рукам привязывали, у кого-то еще какие-то ассоциации. Откуда пошло лево/право по первичной оси X – я думаю, что из письменности. Сразу оговорюсь, почему не вертикаль – на полу корячиться с японской каллиграфией не практично, особенно в пещерах. Стены редко трогают, а пол замазывается «шкурами мамонтов». Плюс «челобитную», написанную по вертикали, как вторичной оси, можно держать за один верхний край – второй торец оттянет гравитация, а горизонтальный скролл при вертикальном письме потребует два гвоздя на стене или две руки при чтении вживую.

    Когда что-то пишешь, важен контекст — важен “backspace головного мозга” – т.е. желательно видеть только что набранное. Представим себе стандартного питекантропа у пергамента или каменной стены, и он правша. Чтобы видеть уже «набранный» текст и учитывая физиологию организма (правша) — текст пишется слева направо и сверху вниз. Отсюда, вероятно, возникла ось X как слева направо. Тем временем в параллельной реальности, видимо, доминировали левши — отсюда RTL BiDi (right-to-left bidirectional заморочки) и упомянутый выше endianness.

    Дальше — ось Y, вертикаль. Рене Декарт, а скорее всего раньше. Могли направить вверх, могли направить вниз. Полагаю, что вниз не направили, чтобы не думать лишний раз об Осирисе :) Но при этом всём супер-физики и супер-математики всего мира изобретают телевизор и… ось Y направлена вниз – развёртка ЭЛТ кинескопа идёт сверху вниз, и до сих пор технологически по HDMI в LCD так же попадает. Полагаю, что пиксели первого ЭЛТ кинескопа проассоциировали с направлением письма.

    Дальше 3D веселуха – идём по оси Z. У одних (DirectX) она направлена из глаза. У других (OpenGL) в глаз. У третьих (Maya/3D-Max/Blender) она местами вертикально стоит. Связано опять же с психологией. Кто-то привык воспринимать геометрию с школьной/университетской доски — тогда Z логично идёт в направлении от, а кто-то привык дома на столе чертежи рисовать — и тогда XY плашмя на столе, а Z вверх под люстру с комарами. Я посмеялся в своё время, когда в DirectX(10-11) Z-Buffer толерантно переименовали в Depth-Buffer :)

    К теме, почему ось Z идёт из глаза (DirectX) или в глаз (early OpenGL, maybe now too). Есть такая штука как правоориентированный или левоориентированный базис, чтобы на векторном произведении работало «правило буравчика» или «правило отвёртки» — крутишь первый вектор во второй — получаешь направление результата. Правая резьба / левая резьба – всё о том же самом, под какую руку оно физиологически удобней. Нюанс в том, что при устоявшихся математических X-вправо, Y-вверх получается, что логичный Z-вдаль порождает левоориентированный базис, что и покусали в OpenGL, направив Z внутрь в глаз тупо ради правоориентированного базиса, но оно математически криво, т.к. работать приходится с отрицательными числами.

    Есть и другая попроще версия, почему XY то спереди, то плашмя. И почему Z то в бровь, то в глаз.

    image

    А чем дальше, тем круче. Люди не смогли договориться о том, как писать вектора – в строку или в столбец. Меня в российском универе (ПетрГУ) учили в столбец. В OpenGL вроде та же ситуация. В DirectX в MSDN сталкиваюсь со строчной записью – и она мной воспринимается как непривычная, но более логичная. По одной простой причине – если flow мозга работает слева направо (я правша), то каскад преобразований в случае строчного представления вектора выглядит по ходу пьесы и чтения, т.е. VxM1xM2xM3, а не в обратном операторном порядке M3(M2(M1(V))), и в HLSL в итоге имеем декларацию ориентации матриц, чтобы всем было удобно row/column. Everybody’s business is nobody’s business.

    Back to XY. В своё время еще по школе меня удивила постановка вопроса про синус и косинус. Этимологически косинус — нечто, сопряжённое синусу (ко-синус). Тем не менее, более «первичный» синус определяют как отношение противолежащего катета к гипотенузе, хотя обсуждаемый угол образует прилежащий — и он вроде ближе. Непонятный «перевёртыш», правда математически логичный, т.к. sin(0)=0 и sin'(0)=1 (у косинуса ТТХ хуже). Та же ситуация с тангенсом и ко-тангенсом, технически тангенс можно было определить и как cos(x)/sin(x). Тангенс в том виде, в котором он есть, просто более логичен с математической точки зрения. А теперь, внимание, вопрос:

    Почему, когда начали рисовать «стандартный математический круг» с радианами — первичный «синус» положили на вторичную ось Y, а вторичный «косинус» положили на первичный X? (X «первичный» по той простой причине, что когда мы, человеки, обсуждаем что-нибудь одномерное, мы это делаем по горизонтали). Отсюда возникает «ломка мозгов», что есть часовая стрелка, а есть еще и математическая. Одна стартует сверху-по-центру, а вторая сбоку-припёку. Плюс направление приходится в башке вращать. Плюс все эти Culling mode в DirectX'ах с CW/CCW (clockwise/counter-clockwise) и т.д. и т.п.

    Представим на момент, что перевёртыша не было, т.е. X0=X=sine, X1=Y=cosine. sin(0)=0, cos(0)=1. Брюки превращаются в…


    элегантный clockwise. Вместо того классического легаси недорефакторинга, с которым приходится иметь дело. Вероятно, с тех пор, как sin(x) versus x привыкли рисовать по ординатам, как функцию.

    (...to be continued...)

    P.S: Все эти «репризы эпистолярного жанра» не просто так. Часто в жизни возникают моменты, когда ты что-то придумываешь, а тебя осекают фразами вида «так неудобно». Ты начинаешь рефлексировать, включать режим отладки головного мозга, — только ради того, чтобы прийти к выводу, что «неудобно == непривычно». Отсюда и название статьи — full reset до пещер, когда придумок не было, чтобы понять — где придумки, а где реальная физика мира. Периодически имеет смысл сделать retrace своей жизни и взглядов при иных входных данных. Часто «неудобное» вдруг становится «удобным», а непривычное привычным, или наоборот. Это — основа рефакторинга.

    Комментарии 199

      0
      паскалевские конструкции вида FOR N := 1 TO N DO излишне нагружают ALU либо превращаются в квест для компилятора.
      Не это ли, внезапно, является причиной тормознутости циклов в Matlab (который тоже 1-based)?
        +1

        Изначально Matlab был написан на FORTRAN. Отсюда индексация массивов с 1 и хранение матрицы по столбцам.

        0
        Хочется так думать, но не думаю. ALU нынче дешёвое. RAM/CAS latency pays the price.
          +2
          Младший бит находится слева, то есть с начала. Ну как не понятно? Ну, блин, сверху.
            +2
            image
              +9
              Теперь эти микросхемы напоминают заводы в факторио)
                +11

                Это как раз заводы факторио напоминают микросхемы.

                  +2
                  Про Факторио я в отдельной статье выскажусь. как разработчик
                  TL;DR: RTX — www.youtube.com/watch?v=7lVAFcDX4eM
                  FFF — www.factorio.com/blog/post/fff-176
                    0

                    Не так давно в статье про запуск Bad Apple в диспетчере задач была ссылка на запуск оного же в factorio, так что рендеринг чего бы то ни было уже не новость.

                      0

                      Вот та статья, если что. Я как-то мимо неё прошёл, хотя это забавно.

                        +1

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

                    +1

                    Этот FFF – кажется, именно тот самый, с которого я начал знакомство с Факторио и вообще осознал, что сырые алгоритмы очень даже имеют место в геймдеве, да и в разработке в целом. То есть это понимание было, но на уровне "%игра% работает тормозно, что-то они там недооптимизировали" – но было неясно, что и как можно оптимизировать, а тут как раз наглядный частный случай.


                    Если мне не изменяет память, тогда переход от "предмета как объекта, перемещаемого конвейером" к "конвейеру как контейнеру списка предметов" помог снизить нагрузку на процессор, но привнёс странное поведение предметов на поворотах. В любом случае, спасибо за хорошую игру. ^_^

            0
            Да, ещё. Кажется, это называется «спонтанное нарушение симметрии» и происходит много где (в физике).
              +4
              Косинус первичен потому, что cos(φ) = Re exp{iφ} и действительная часть числа первичнее мнимой части sin(φ) = Im exp{iφ}. Ну или, например, если мы повернем простейший нетривиальный вектор {1, 0} на некоторый угол, то первой (нулевой :) компонентой опять получим косинус (причем это работает не только для двухмерных поворотов).

              А с нумерацией, начиная с 1, даже сами человеки путаются: с какого года начинается третье тысячелетие, с 2000 или 2001? И если правильный ответ — второй, то почему праздновать больше тянет наступление первого? А с естественной нумерацией все просто: 1967 — это год 19 века и 1-го тысячелетия и праздновать надо круглые числа.
                0

                Естественная нумерация — это с нуля?

                  +2
                  Тут можно поспекулировать, что первичней мнимая часть, потому что через степени мнимой i можно выйти на действительные +1 и -1, а через степени действительных в мнимую уже никак.
                    +1
                    Хотя не, торможу :) -1^0.5
                    +2
                    почему праздновать больше тянет наступление первого?

                    Потому что можно раньше начать пить путают порядковые числительные (идёт 2000-й год) с собирательными (прошло 2000 лет, и начался 2001-й)

                      0

                      Косинус первичен, потому что исторически первичен секанс, который, кстати, направлен вдоль первичной оси.
                      https://lez.m.wikipedia.org/wiki/Файл:Circle-trig7.svg

                      +16
                      В смысле — «Паскаль1-based»?
                      Объявление переменной типа массив в Паскале:
                      var
                      v: array[idx1..idx2] of sometype;

                      idx1 и idx2 могут быть даже отрицательными, главное чтобы idx2 > idx1.

                      так что вариант
                      a: array[0..9] of integer;
                      вполне себе вариант.

                      Даже если говорить про динамические массивы вида
                      a: array of integer;
                      то и там первый элемент будет a[0].

                      Или я чего-то путаю из школьной программы?
                        +5
                        Нет, вы правы.
                        Массив в паскале может быть объявлен по любому диапазону любого скалярного типа.
                        Это автор попутал со строками в Turbo Pascal/Delphi. Там действительно 1-based (в старых версиях, в новых версиях это можно переключать опциями, а для некоторых мобильных платформ вообще сделали 0-based по умолчанию, что IMHO породило лютый беспорядок и вроде бы потом всё вернули взад).
                          +6
                          Классические строки в Паскале, насколько я помню, это вообще частный случай динамических char-массивов, когда 0-ой элемент зарезервирован под длину.
                            +1
                            Тут есть несколько моментов:
                            1. Shortstring в Delphi — массив самый что ни не есть статический, размер задается при объявлении (255 по умолчанию). Текущая длина строки — да, лежит в 0-м байте.
                            2. В стандарте паскаля конкретная реализация строк никак не прописана (по крайней мере ранее не была, сейчас уже не знаю). Просто Борланд сделали так, как сделали…
                            3. В динамических массивах Delphi длина действительно хранится перед началом, но это скорее "-1" элемент, т.к. динамические массивы (относительно недавнее изобретение) как раз-таки 0-based :) Ага, и так у них всё…
                              0
                              Абсолютли! Даже не в Delphi, а уже в Turbo Pascal.
                                0
                                т.к. динамические массивы (относительно недавнее изобретение)

                                Года через три после появления Delphi на свет, и более двадцати лет назад, если позанудствовать :)
                                  0
                                  Так я же говорю — относительно :)
                                  Смотря с чем сравнивать. Я вот Turbo Pascal помню с 80-х, еще до изобретения Turbo Vision, (т.е. до синих панелек :) ).
                                    0
                                    Моим первым Паскалём была адаптация Турбо-Паскаля 3.0 для «Поиска». Запускалась с кассеты, компилировала тоже на кассету :)
                            0
                            Мне с Turbo/Borland Pascal'я во времена 286/386 запомнилось, что там по-умолчанию 1-based. Ну и соответственно в мозги будущим программистам лили эту парадигму, что обычно циклы писались I:=1 to N, а не I:=0 to N-1. Да, сам язык, возможно этого не запрещал, но вот так сложилось.
                              0
                              И циклы обычно писались… to N а не… i < N
                            0
                            del
                              +3
                              Котангенс вполне даже логичен и мнемонически: «косинус»/«синус» = «ко»
                                +15
                                Очень удобно и правильно когда веса разрядов равны смещению. Очень уважаю разработчиков процессоров, которые нашли смелость наплевать на дебильные общепринятые стандарты и сделать правильно!
                                Обычно обе вонючих шизы — биг эндиан и 1-бейс идут рука об руку (ещё и десятичная пихается система там где не надо, да). Байт в дворде с весом 2560 имеет номер 4, 2561 — 3-й, 2562 — 2-й, 2563 — 1-й. Любая работа с вложенными диапазонами — постоянная необходимость добавлять-вычитать единичку чтобы перейти от «номера» к нормальному смещению. Плеваться хочется от кривости и бессмысленности! Но им так привычно видите ли… При этом даже сами не могут решить как надо — даты нумеруют с 1 числа, а время — с 0 часов. Сами постоянно наступают на свои грабли: 21-й век — это 2000-е, причём начинается он с 2001 — они сами в этом путаются, но всё равно рьяно защищают свой дебильный 1-бейс. И ни чуть не смущаются!
                                Два главнейших врага разума — это привычки и инстинкты…
                                  0
                                  big endian идет в сети, там это весьма оправданно. А вот чтоб распарсить число прочитанное из сети — на little endian приходится swap делать. Неудобно!
                                    +4
                                    Оправдано, что в момент зарождения сети большинство было big-endian, а остальные под них подстраивались? Современные протоколы уже опираются на little-endian, вроде sbe/protobuf.
                                    0
                                    Два главнейших врага разума — это привычки и инстинкты…
                                    У человека инстинктов не так уж и много, и наблюдать их можно в полном объёме уже у новорождённых.
                                      0

                                      Да их и у моей кошки не так уж и много. Я как-то считал, что она руководствуется от силы двумя дюжинами стимулов, притом отклик у неё — почти всегда на инстинктах.


                                      То же и у человека: в зависимости от обстоятельств, есть «непреодолимые» желания, которые один из двух главнейших врагов разума не даёт называть инстинктами, несмотря на объективные данные. Только у человека пути воплощения этих желаний могут быть изощрённее. А если подумать, глобальные цели людей почти всегда можно свести к инстинктам. Лучше жить (в частности, иметь больше зарплату, изобретать новые полезные вещи или, наоборот, сжигать вышки 5G) → иметь больше шанс завести потомство, обеспечить его лучшей жизнью, дать ему больше шансов на выживание.

                                        0
                                        Если бы так, то после окончания репродуктивного возраста люди бы самоуничтожались, чтобы не конкурировать за ресурсы со своим потомством.
                                          +1
                                          Если бы так, то после окончания репродуктивного возраста люди бы самоуничтожались, чтобы не конкурировать за ресурсы со своим потомством.
                                          Ну так, в момент формирования оных это же примерно так и было? )))
                                          Плюс надо учитывать, что в целом стадо тех же слонов тем успешнее, чем старше и опытнее у них вожак — он больше помнит. В этом случае старые особи помогали выживать своим потомкам.
                                            0
                                            У чукчей есть странные обычаи
                                          0
                                          То, что можно наблюдать у новорожденных — это рефлексы.
                                          +5
                                          Весьма забавно порою получать проблемы из-за ребят, которые считают, что в 16-битной переменной старший бит имеет номер 1, а младший — номер 16. Это с одной стороны. А с другой стоит программный пакет, который привычным образом нумерует от 0 до 15, от младшего к старшему.
                                          Такая же беда была у Texas Instruments в их старых разработках — например, в TMS9918, где мозг взрывается от нелогичности нумерации при чтении документации, пока не сообразишь, что биты адреса у них нумеруются в одну сторону, а биты данных — в другую. Что, впрочем, логичности не добавляет. :)
                                            +2

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

                                          +7

                                          "Косяк" с заимствованием вместе с "арабскими цифрами" ещё и арабскую запись чисел справа-налево вроде понятен. И я даже могу представить себе как бы это могло выглядеть и использовалось бы при "правильной" записи слева-направо. Но не хватает фантазии представить как бы это звучало в устной речи (и записи чисел словами). По моему в этом контексте как раз более важным является порядок числа, который в текущем виде озвучивается первым (две тысячи четыреста одиннадцать). Точно так же как он и записывается цифрами (2411). Так что может всё дело не в арабском справа-налево, а в том как было удобнее числа озвучивать устно?

                                            +1
                                            Тем не менее даты в европейской традиции озвучиваются от младших разрядов к старшим (а у китайцев вполне логично год — месяц — день).

                                            Время традиционно тоже (25 минут двенадцатого).
                                              +3
                                              Или «одиннадцать часов двадцать пять минут».
                                                +2
                                                До появления электронных часов такая форма не была особо распространенной. Так выражались разве что военные («наступление в три часа ноль минут»).
                                                  +1
                                                  Запись времени, так или иначе, была и остаётся именно такой. Устно эта форма употреблялась гражданскими лицами и институтами везде, где важна была точность. Самый простой и понятный пример — транспорт. Да, если вы когда-нибудь набирали на дисковом телефоне «08», то должны были бы вспомнить формат ответа. :)
                                                    0
                                                    Запись времени, так или иначе, была и остаётся именно такой.

                                                    Где-то была, где-то не была.

                                                    Да, если вы когда-нибудь набирали на дисковом телефоне «08», то должны были бы вспомнить формат ответа. :)

                                                    Там это было вызвано техническими ограничениями, чтобы из пары десятков записанных слов собирать все возможные ответы.
                                                +2

                                                ну логика тут двояковыпуклая — раньше то что чаще меняется, а так то вы конечно правы, год-месяц-число было бы как цифры

                                                  +2

                                                  Да, нет ничего лучше ISO-8601!

                                                  +9
                                                  Особые извращённые используют формат месяц — день — год
                                                    +3
                                                    Особые извращённые

                                                    Ага, и имя им «американцы» :)
                                                      0
                                                      И ещё несколько стран, например Филиппины.
                                                        0
                                                        на территории России тоже, до определённого года.
                                                          0
                                                          Можно пруф?
                                                        0
                                                        Еще особо извращённые в HTTP трафике зачем-то вписывают не только формат даты, который надо угадывать, но и часовой пояс и, о хоспади, день недели! который однозначно из даты вычисляется. Нет бы таймстемпом обойтись и тулзами, парзящими хедер. И это в модемные времена, когда максимально экономили на сетевом трафике.
                                                      0
                                                      И я даже могу представить себе как бы это могло выглядеть и использовалось бы при «правильной» записи слева-направо. Но не хватает фантазии представить как бы это звучало в устной речи (и записи чисел словами).

                                                      В немецком, например, 42 произносится «два и сорок», в чем проблема?
                                                        +2
                                                        Справедливости ради заметим, что это применимо только для двух младших разрядов.
                                                          +1
                                                          Для двух младших разрядов из каждых трёх.
                                                            0
                                                            Кстати, да, но ведь не число целиком читается справа налево, а только эти два младших разряда в каждой тройке. Отчего, между прочим, читать число ещё сложнее.
                                                          –1
                                                          Это вы ещё французское произношение не видели…
                                                          Заголовок спойлера
                                                          image
                                                          +3
                                                          мне больше интересно как будет 2411 справа налево — один десять четыреста две тысячи?
                                                          Как вообще произносить десятки сотни и другие разряды, если они идут после?
                                                            +7

                                                            Это вам к лингвистам. Как правильно произносить они решают. Мы тут решаем как удобнее считать.


                                                            Чтобы два раза не вставать. Статья великолепна.

                                                              0
                                                              Язык не подчиняется никаким лингвистам. Разве что они сами его придумывают — типа Логлана. Там как раз числа очень логично называются — просто по цифрам.

                                                              123 = раз два три

                                                              А цифры называются тоже логично:

                                                              2 to 3 te 4 fo 5 fe и т.п.
                                                                0
                                                                Я думаю, что лингвистам следует прогибаться под счет, а не наоборот. Да, собственно, так оно скорее всего и было. Нюанс в инерции. Так же люди чаще сравнивают числа, чем складывают/вычитают/умножают (особенно когда цифры описывают деньги). Ну и, возможно, под эту более частую операцию сравнения на предмет меньше/больше и заточили порядок.
                                                                  0
                                                                  2 to 3 te 4 fo 5 fe и т.п.

                                                                  Почему-то в голове сразу ассоциация с DTMF пошла :-)

                                                                +6
                                                                Ну как раз один-надцать, две-надцать, три-надцать и далее, так и произносятся — сначала младший разряд, потом старший.
                                                                  0
                                                                  Ну в немецком, например, двадцать один — это ein und zwanzig (буквально — «один и двадцать»), и никто не удивляется…
                                                                    +1

                                                                    А в японском (и, наверное, китайском тоже) есть отдельные группировки и для других порядков, например 1万 = 10000, в английском в обратку встречаются конструкции вида "$2500 = twenty-five hundred bucks". Думаю, нам про все эти форматы ещё многое предстоит узнать...


                                                                    ЗЫ. В японском при этом слово, обозначающее "забитость, полную занятость" читается так же, как и "десять тысяч" — "ман", но имеет разное написание; напр. 満車 — парковка занята, 満席 — мест нет. Интересно, это тоже как-то связано? :-)

                                                                      +1
                                                                      Там просто система исчисления в принципе имеет основу инкрементации степени в 10^kn, k=4, а не как у нас k=3. Потому у них 10^4=万(ман), 10^8=億(оку), а у нас 10^3 — тысяча, 10^6 — миллион, 10^9 — миллиард. На 150000 они говорят 15 манов, а миллион — 100 манов, и это — не «вариант», а правило.

                                                                      А ещё, по поводу степеней 10^3n, n>2, в нашем языке тоже есть странности, кмк. В английском всё вроде достаточно понятно: n=2 — million, 3 — bi-llion, 4 — tri-llion, 5 — quad(ri)-llion и т.д.
                                                                      А у нас — 10^9 — миллиард, а потому многие говорят на 10^12 не триллион, а триллиард, а из тех кто так не делают, некоторые думают, что триллиард 10^21 идет за триллионом и т.п… Да, в англ. тоже есть milliard, но он по факту не используется.
                                                                      Конечно, кто технарь, так не делают, но большинство людей — не технари.
                                                                        0
                                                                        а из тех кто так не делают, некоторые думают, что триллиард 10^21 идет за триллионом

                                                                        Это называется "длинный счёт" и является стандартом во многих странах.


                                                                        В английском всё вроде достаточно понятно: n=2 — million, 3 — bi-llion, 4 — tri-llion, 5 — quad(ri)-llion и т.д.

                                                                        Там же — в Англии до сих пор есть следы длинного счёта. В США короткий счёт утвердился очень давно.


                                                                        Конечно, кто технарь, так не делают, но большинство людей — не технари.

                                                                        Многие технари знают про это различие.


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

                                                                        0
                                                                        в английском в обратку встречаются конструкции вида

                                                                        Английский бывает разный: в индийском официально используются числительные lakh (сто тысяч) и crore (десять миллионов), можете сами погуглить их c site:gov.in

                                                                        Интересно, это тоже как-то связано? :-)

                                                                        Нет: оба слова заимствованы из китайского, где было /muɑnX/ «занятость» и /mʉɐnH/ «десять тысяч». В нынешнем кантонском они тоже различаются гласной и тоном: mun5 против maan6. Японская фонетика не в состоянии передать такую разницу.
                                                                      +1
                                                                      один-на-десять и четыре-на-двадцать сотен

                                                                      Но вообще в живых языках полной логичности обычно не наблюдается — начнут так, продолжат эдак. Видимо, счет до тысячи стал актуален на несколько веков позже, чем счет в пределах сотни, который стал актуален позже, чем счет до 20. (В русском языке такого тоже достаточно, родительный падеж при числительных до 4 — остаток двойственного числа. «Не штОрмы, а штормА»; «ветрА, не вЕтры».) В одном из европейских языков вообще круть: 98 = «трижды-шесть и четырежды-двадцать», для двадцати отдельное слово.

                                                                      По-хорошему, надо посмотреть, как числа записывались буквами до появления цифр, в каком порядке. Это даст какую-то аргументацию в пользу того, какой порядок для какого языка считался более естественным. (У римлян IX — это «без одного десять», напоминает дедушкин счет времени, нам-то ближе 18:56.)

                                                                      А еще есть гипотеза, что цифры — это первые буквы алфавита какого-то языка, от которого возможно больше ничего не осталось.

                                                                        0
                                                                        По-хорошему, надо посмотреть, как числа записывались буквами до появления цифр, в каком порядке.

                                                                        Для моего нижеупомянутого примера (Быт 5:27) — и в Септуагинте (3в), и в Вульгате (4в) современный порядок числительных (big-endian). У вас есть примеры более старых текстов на европейских языках с трёхзначными (или более) числительными?
                                                                      +1
                                                                      В арабском, так же как и в немецком единицы и десятки произносятся не в порядке написания. То есть читается сотни, затем единицы, затем десятки.
                                                                        0
                                                                        Зависит от языка.
                                                                          0
                                                                          Но не хватает фантазии представить как бы это звучало в устной речи (и записи чисел словами).

                                                                          Я уже приводил пример: biblehub.com/interlinear/genesis/5-27.htm
                                                                          +4
                                                                          Это ещё не выходя за пределы программистской математики. Мне музыканты не могли объяснить, почему на 12 полутонов 7 белых и 5 чёрных клавиш. Да и нагуглить ответ не просто было
                                                                            0

                                                                            А сколько надо? 6+6? Тогда же ориентироваться в них сложно будет))


                                                                            Куда более интересно, почему си-бекар стал белой клавишей в то время, когда им пользовались примерно с той же частотой, что сейчас буквой ё

                                                                              +7
                                                                              Мне музыканты не могли объяснить, почему на 12 полутонов 7 белых и 5 чёрных клавиш.
                                                                              Гамма Ля (первая в западной теории) белыми и полутона которые в нее не входят черными.
                                                                                0

                                                                                А как быть с ре# и ля#?
                                                                                Так-то под эту гипотезу можно натянуть много сов.

                                                                                  0

                                                                                  А что с ними? Они не в гамме Ля Минор

                                                                                    0

                                                                                    А причем тут минор? В западной теории в нотацию тонического аккорда с большой буквы вшит мажор.

                                                                                0
                                                                                Там не просто так. Если сыграть только по белым клавишам — звучать будет мелодично, но именно потому, что между белыми клавишами не равные интервалы. А черные — как бы добавочные. Но есть подозрение, что да — это вопрос привычки.
                                                                                ru.wikipedia.org/wiki/Лад_(музыка)
                                                                                  +3
                                                                                  Не только привычка. Квинта — однозначный консонанс, а от примы до квинты — 3 с половиной тона, и в целотоновую гамму (6+6) она не входит.
                                                                                  Во многом это все привычка, конечно, да и «теория музыки» — это на самом деле «Теория европейской музыки 18го столетия».
                                                                                +5
                                                                                Тоже долго не мог найти нормальное объяснение. Мне больше всего понравилась теория, что белые клавиши были выбраны для полутонов с номерами i, для которых 2^(i/12) хорошо приближается рациональной дробью со знаменателем из степеней 2, 3 (а эти знаменатели пришли из пифагорова строя). Вот картинка, строка 12-TET. Это не объясняет все белые клавиши, но большинство.
                                                                                  0
                                                                                  Лучше вообще не вскрывать эту тему. А то рано или поздно кто-нибудь случайно произнесёт «432 герца» и всё заверте…
                                                                                    +2
                                                                                    На хабре на эту тему есть любопытная статья
                                                                                    habr.com/ru/post/471600
                                                                                      0
                                                                                      Учился не на фортепьяно, а на баян. Не смотря на то, что клавиши правой руки имеют общепринятую расцветку, расположение 12 клавиш идет как-бы «подряд», без разделения, но по «спирали». И в определенный момент обнаружил, что любую мелодию можно играть на полтона или на 1 тон, или 1,5 тона выше или ниже простым геометрическим смещением первой ноты — просто ставим на грифе палец выше-ниже или левее-правее.
                                                                                      Так что если судить по звучанию (на слух), а не по цветам клавиш, то 12 тонов вполне себе имеет смысл.
                                                                                      Но после баяна на фортепьяно перейти не смог — мозг категорически сопротивляется нелогичности расположению клавиш.
                                                                                        0

                                                                                        Та же фигня на гитаре. Транспонирование порядком легче, чем на фортепиано.

                                                                                      +4
                                                                                      Людям нравятся сложности. Люди при всей глобализации до сих пор на метры и килограммы не перешли, и розетки до сих пор разные.
                                                                                      Видимо мы ещё долго будем «есть кактус» создавая проблемы сами себе, потому что «так исторически сложилось».
                                                                                      Кстати по работе при анализе процессов фраза «мы так всегда делали» основа 40% технологий.
                                                                                        +1
                                                                                        Люди при всей глобализации до сих пор на метры и килограммы не перешли, и розетки до сих пор разные.

                                                                                        Не "людям нравятся сложности", а "рефакторинг такого масштаба слишком дорог" и "необходимо поддерживать совместимость с уже имеющимися на рынке решениями". Давайте хотя бы розетки: представим, что у нас страна, где в розетках привычные ~230 вольт, просто форма штекера своя. Давайте прикиним, сколько нужно времени и денег, чтобы заменить эти розетки во всех домах страны, потом на всех производствах техники, а потом — сколько ещё вбухать деньги в переходники для старой техники. В дальней перспективе наверное круто, но кто здесь и сейчас за это платить будет? ;-)

                                                                                          0
                                                                                          Думал про этот кейс. В принципе если всем миром определиться что например РФ переходит на US/CH стандарт вилок (плоские прямоугольные), не вижу ничего супер сложного. С 01.01.20ХХ переходим на тотальное производство вилок и розеток под новый стандарт. В течении 5 лет ко всей технике прикладываем переходник. Расходы даже близко не сравнятся с затратами на один фейерверк в столице.
                                                                                          Некоторые страны в этом веке уже меняли стронность движения и ничего. Недавно в течении нескольких лет у нас в стране все приборы давления к системе СИ приводили.
                                                                                            +2
                                                                                            что например РФ переходит на US/CH стандарт вилок (плоские прямоугольные)
                                                                                            Дурацкие вилки, кстати. Маломощные и небезопасные. Да и в целом энергетика у буржуев так себе…
                                                                                            Уж нам переходить на американские стандарты так же полезно как переходить на дюймы…
                                                                                              0
                                                                                              Да и в целом энергетика у буржуев так себе…


                                                                                              США на 2 месте после Китая, например

                                                                                              Дурацкие вилки, кстати.


                                                                                              Legacy оно такое… В странах, которые электрифицировались позже, провели работу над ошибками.
                                                                                                0
                                                                                                Согласен дурацкие вилки, хуже только Мальта/UK. ТАм вообще бредовая конструкция.
                                                                                                НА самом деле круче было бы провести исследование какая вилка более оптимальна с учётом практики и т.д.
                                                                                                У плоской вилки есть свои плюсы, кстати на некоторых есть отверстия на конце и они зажимаются в розетке. Тут нужен мега- ТРИЗ исследование.
                                                                                                  +5
                                                                                                  Ну не знаю, мне система в UK кажется очень продуманной. Выключатель на розетке, предохранитель в вилке, удлиненный земляной контакт открывает шторки на ноль и фазу, сами ноль и фаза всегда разведены однозначно… Разве только размер не самый компактный.
                                                                                                    0

                                                                                                    Вы просто на британскую ночью в темноте не наступали, после этого любая будет иметь преимущество :-)


                                                                                                    А американские да, погоняешь фен паяльный полчасика, или вскипятишь три чайника подряд — уже и вилка с розеткой тёплые. 100 вольт, они-то тоже уменьшению тока при константной мощности не способствуют.

                                                                                                      +1
                                                                                                      При наличии выключателя в розетке вытаскивать вилку и бросать ее на пол совершенно ни к чему.
                                                                                                        +1

                                                                                                        И то верно!

                                                                                                          +1
                                                                                                          Розетка одна, потребителей 3, подключаются по мере надобности, например. Но я за свою жизнь не могу вспомнть случая, когда наступал на европейскую вилку.
                                                                                                  +2
                                                                                                  Недавно в течении нескольких лет у нас в стране все приборы давления к системе СИ приводили.

                                                                                                  а еще более недавно — два раза в 1/5 части суши меняли TZ… Туда и назад.

                                                                                                  +3
                                                                                                  Давайте прикиним, сколько нужно времени и денег, чтобы заменить эти розетки во всех домах страны, потом на всех производствах техники, а потом — сколько ещё вбухать деньги в переходники для старой техники.
                                                                                                  Так прямо сейчас это происходит(или произошло), когда одновременно сосуществуют вилки типа C и F, когда не каждую вилку не в каждую розетку вставишь. И если современные вилки от лампы или смартфона втыкаются и туда и туда, то советские приборы, как впрочем и современные с заземлением входят только в своё родное. В несколько меньшем масштабе это происходит с usb при переходе с b на c.
                                                                                                  В дальней перспективе наверное круто, но кто здесь и сейчас за это платить будет? ;-)
                                                                                                  А кто простых людей спрашивает? Их просто перед фактом ставят. В том же Казахстане алфавит меняют(или не меняют, не слежу за новостями), уже третий раз за последние сто лет, с арабской вязи на кириллицу и теперь на латиницу. При чём, если с переходниками и удлинителями можно пользоваться ещё не одно десятилетие, то это будет полной потерей обратной совместимости.
                                                                                                    –1
                                                                                                    При чём, если с переходниками и удлинителями можно пользоваться ещё не одно десятилетие, то это будет полной потерей обратной совместимости.

                                                                                                    в РФ сделали реформу языка в 1917 вроде. И ничего. Все скушали это

                                                                                                      +1
                                                                                                      Открыв старую книгу я вполне могу читать даже без дополнительного обучения, за счёт долгой практики, просто догадываясь как будет читаться тот или иной знак, но это для «современных» текстов, без всяких юсов, там потребуется дополнительное обучение. А вот другой алфавит ещё учить надо, так что текст на глаголице сходу я точно не осилю.
                                                                                                      +1
                                                                                                      я вам больше скажу. после арабской была латиница, и только потом кириллица. а нынешняя латиница как минимум третья по счету после кириллицы. только все равно говно говнянское нелогичное и тупое: букву С исключили — она типа есть только в русском языке (Цаплины идут нахер, они какие-то неправильные граждане), теперь POLISIA пишут, но это не главный прикол. Есть в алфавите _буква_ CH — которая вместо Ч стала, да, буква, которая состоит из двух символов, одного их которых в алфавите нет. Ну и мелочи типа того, что три буквы выглядят одинаково в заглавном исполнении.
                                                                                                        0
                                                                                                        я вам больше скажу. после арабской была латиница, и только потом кириллица.
                                                                                                        «Назад в будущее» там точно снимать нельзя.
                                                                                                          0
                                                                                                          Кириллицу недолюбливают (как минимум в Чехии) из-за того, что многие привычные по начертанию буквы звучат по-другому относительно латиницы. Примеры — Р, H, В, У, Х. Так же странно выглядит И как развёрнутая N. И не исключаю, что З взяли как цифру три — т.е. как будто Кирилл с Мефодием намеренно сделали «рельсы другой ширины». С другой стороны, в кириллице есть полезные Ж, Ч, Ш и Щ в то время, как на латинице приходится изголяться через zh, ch, sh, sch либо через умляуты. Я думаю, и войны вокруг буквы Ё идут из-за того, что она и Й единственные с умляутами в алфавите.
                                                                                                            +3
                                                                                                            И не исключаю, что З взяли как цифру три — т.е. как будто Кирилл с Мефодием намеренно сделали «рельсы другой ширины»

                                                                                                            Нет, это было задолго до прихода индийских-арабских цифр. Хвостик у Z в скорописи загнулся вниз и удлинился.


                                                                                                            Кирилл с Мефодием, сейчас считается, сделали глаголицу, а кириллицу в нынешнем смысле породили их ученики, заменив все символы, для звука которых были буквы в греческом, на греческие.


                                                                                                            А что недолюбливают (кто? не думаю, что все чехи — большинству пофиг) — точно так же можно и латиницу недолюбливать. Зачем потребовалось западным грекам (и вслед латинянам) заворачивать хвостик у П так, что она превратилась в Р, отчего исходная Р потребовала нового элемента и превратилась в R? Зачем было устранять K и искусственно создавать новую букву G, хотя исторически именно C выполняла роль Г (и это она же по происхождению, только переведена в плавную форму)? Многие прочие замены понятны, но зачем было тут вводить несовместимость на пустом месте?

                                                                                                              0
                                                                                                              Да, кстати, еще забыл упомянуть, что Я — это развёрнутая R. Кто и когда накосячил — мне доподлинно неизвестно. Сам факт наличия этих перевёртышей в 2020 налицо.
                                                                                                                +1
                                                                                                                Да, кстати, еще забыл упомянуть, что Я — это развёрнутая R.

                                                                                                                Изменение форм букв: H, N, Ѧ на И, Н, Я соответственно — реформа письменности 1708 года, закрепившая упрощённые формы из уже привычной скорописи. Дальше вслед за русской кириллицей это изменение постепенно было принято всеми прочими. Это общеизвестный факт, прослеженный многими исследователями по источникам.


                                                                                                                Так что откуда вы взяли про "развёрнутую R" — непонятно, но давайте не делать поспешных упрощений. А то так можно придраться и к тому, что у немцев V значит [f], Z — [ts], а в английском и французском вообще фиг поймёшь, как читать какие-нибудь anxious/anxiety или eaux...

                                                                                                                  +3

                                                                                                                  Для особо альтернативно одарённых в статье в Википедии про "Я" достаточно чётко всё объяснено, а откуда R взялось — даже гифчик нарисовали:


                                                                                                                  image

                                                                                                              +1
                                                                                                              Есть и другие минусы. Ширина букв слишком различается, а вот высота очень часто одинаковая, и получается много слов «в ряд», когда ни снизу ни сверху ничего не торчит, а значит и распознается такое слово сложнее. В латинском алфавите буквы в ширину различаются намного меньше, зато вверх и вниз буквы расползаются намного чаще.
                                                                                                              А в двухбуквенных/трехбуквынных сочетаниях ничего плохого нет, как мне кажется. Минусы бывают только если чтение будет неоднозначным, но это от языка зависит.
                                                                                                                0
                                                                                                                А в двухбуквенных/трехбуквынных сочетаниях ничего плохого нет, как мне кажется.

                                                                                                                Проблемы с сортировкой: либо слова на «Х» идут посередине слов на «Ц», либо сочетания надо выделять и обрабатывать как отдельные буквы.
                                                                                                                Ещё проблемы, когда сочетания идут подряд, как в фамилии Chruschtschow.
                                                                                                                  0
                                                                                                                  Ээээ, и почему это проблема? Я немецкий в школе учил, там S частенько читается как «ш» в сочетаниях с T и P (ну и в случае sch), и никаких проблем с сортировкой нет. А вы сейчас придумываете проблему на ровном месте. В литературном русском «Япония» не читается «йапония», звучит ближе к «йипония» или «йэпония», но никто не ставит Японию после Италии. По какой-то _неведомой_ причине. Буквы ё, я, ю — тоже сочетание двух звуков в некоторых случаях — в начале слова особенно — и опять, никто в здравом уме не говорит, что надо сортировать по типу йо, йа, йу — в середине алфавита.
                                                                                                                    0
                                                                                                                    Я немецкий в школе учил, там S частенько читается как «ш» в сочетаниях с T и P (ну и в случае sch), и никаких проблем с сортировкой нет

                                                                                                                    Ну, я не знаю… В том же венгерском — сначала идет Z (и все слова с него), а потом ZS (потому что это диграф). Ну, не хватило в латинице знаков для обозначения всех звуков

                                                                                                        0
                                                                                                        А чего мне представлять, у нас на работе старые розетки в куче мест были
                                                                                                        Вооот такие
                                                                                                        image
                                                                                                        и дикая куча переходников с и на евро стандарт.
                                                                                                        Но вообще, такие мне даже больше понравились, удлинители и тройники компактнее можно же делать.
                                                                                                          +1
                                                                                                          Внутри сделано очень прилично. Помещается туда же, где стояла «советская» розетка, только вместо одной становится три. Вставляются любые вилки. Очень удобно. Купил лет десять назад две штуки и с тех пор больше не видел. Вроде турецкого производства.

                                                                                                          image
                                                                                                      +1
                                                                                                      А ещё есть такая вещь, как модуль часов RTC в микроконтроллерах. В большинстве случаев он для «удобства» считает в секундах, минутах, часах, причём нет отдельного 32-битного счётчика для unix-формата. И вот, если тебе надо узнать количество времени до события, или завести аларм через некоторое время, ты переводишь программно всю эту красоту в unix-формат, выполняешь сложение или вычитание, и переводишь обратно в BCD, чтобы положить в регистры аларма… Производителям контроллеров даже в голову не приходит, что программистам нафиг не нужен этот BCD, дайте нам 32-битный регистр, ну не делает никто будильник с сегментными индикаторами на пол-гигагерцном проце, а те, кому надо — легко преобразуют в BCD даже на 4-битном контроллере…
                                                                                                        0
                                                                                                        Операция целочисленного деления дорогая. Т.е. переход от uint32 к dd:hh:mm:ss требует деления/остатка на 60. А это энергетически дорого. В первых процессорах операции деления не было. Думаю, первоначально в этом причина была.
                                                                                                          +1
                                                                                                          Операция целочисленного деления дорогая.

                                                                                                          srsly? Я то думал, что остаток легко считается циклом ) Чай — не операции с плавающей точкой (там ад). И, да, будто паковка и распаковка из BCD не требует энергии (да, я помню, что есть аппаратные операции для этих операций)

                                                                                                            0
                                                                                                            Скорее всего, RTC в компьютерах произошли от электронных часов, которые внутре имели 60-ричные счетчики ;)
                                                                                                              0
                                                                                                              srsly? Я то думал, что остаток легко считается циклом )

                                                                                                              На очень мелких числах — да. Но уже на десятках тысяч это становится слишком дорого.


                                                                                                              А целочисленное деление, да, самая дорогая операция в этой группе.


                                                                                                              Чай — не операции с плавающей точкой (там ад).

                                                                                                              Сейчас уже наоборот: Goldschmidt division — требует тщательной подгонки точности, но из-за характера чисел сейчас выполняется дешевле, чем целочисленное деление при тех же размерах значений.

                                                                                                              0
                                                                                                              Деление делалось столбиком, поделить на 60 — это всего лишь 6 вычитаний и 6 сдвигов. И я не говорю, что надо отменить BCD формат — просто добавьте ещё один 32-битный регистр, который будет считать синхронно с BCD счётчиками. Можно даже не синхронизировать их аппаратно. Для современных нанометров лишний счётчик — ничто, а сколько проблем решает…
                                                                                                              0
                                                                                                              :) Согласен. Хороший пример.
                                                                                                              +1
                                                                                                              Есть еще один момент, где 1..N индексация даёт себя знать по сравнению с [0;N) индексацией – это работа с float’ами.


                                                                                                              Не понял, чем работа с массивами float принципиально отличается от массивов int.
                                                                                                              А так да, legacy наше всё.
                                                                                                                0
                                                                                                                Я не про массив int, а про сам индекс. Допустим, у нас есть набор отрезков. 1..N нотация вкупе с [first;last] мышлением приводит к тому, что программист пишет цикл A1..A2;A2+1..A3;A3+1..A4. Когда нотация в голове [0;N) — имеем дело только с контрольными точками A1,A2,A3,A4, т.е. меньше магических чисел в коде. Плюс эти +1 перескоки не подойдут под float'ные смещения. Я согласен, что это больше про [a;b] vs. [a;b) подход, чем про base0 vs base1.
                                                                                                                +3
                                                                                                                Ещё есть число пи. Отношение длины плоской окружности к её диаметру. На практике намного чаще нужно отношение длины окружности к радиусу, и повсюду возникают всякие 2пи. Знаю людей, которые применяют «число тау», как раз равное двум пи, чтобы не загромождать формулы ненужными коэффициентами.
                                                                                                                  +1
                                                                                                                  Вот только число пи находит применение не только при рассчёте длин окружностей. И тогда пришлось бы не домножать на 2, а делить на 2, что намного хуже.
                                                                                                                    0

                                                                                                                    На 2 числа с плавающей точкой делить легко — просто -1 к показателю степени. И если 2 это константа, ничто не мешает так и скомпилировать.
                                                                                                                    А вот если бы был выбор между умножать на 3 и делить на 3, скажем — тут деление действительно намного хуже.

                                                                                                                      +3
                                                                                                                      Всюду где нужно описание цикличиских процессов (физика колебаний, радиотехника) и идёт работа с углами (полярные координаты, радианы, комплексные числа) переход от 2пи к тау = 6,28 был бы чистым подарком. Пожалуй единственная формула которая проще с константой 3,14 это вычисление площади круга. Хотя, если задуматься, многие школьные формулы растут из интегрирования:
                                                                                                                      — кинетическая энергия m*v*v/2
                                                                                                                      — путь при равномерном ускорении a*t*t/2
                                                                                                                      — энергия конденсатора c*u*u/2
                                                                                                                      — энергия поля соленоида l*i*i*/ 2
                                                                                                                      В этом ряду площадь круга tau*r*r/2 была бы вполне логичной.
                                                                                                                        0

                                                                                                                        В манифесте Тау наглядно разъясняется, что использование 2π получается логичнее и последовательнее в большинстве формул, даже если изначально двойки там вроде и не было.
                                                                                                                        EDIT: ой, там ниже на него сослались уже, ну ладно %)

                                                                                                                        +2
                                                                                                                        О да! Отличный пример, когда купившись на мнимое удобство в единичном кейсе, испохабили всю математику на сотни лет вперёд.
                                                                                                                        tauday.com/tau-manifesto

                                                                                                                        На практике намного чаще нужно отношение длины окружности к радиусу
                                                                                                                        И причём тут «чаще»? Как раз из-за того что казалось, что чаще нужен диаметр, «пи» и ввели. По факту же диаметр применяется в математике примерно никогда.
                                                                                                                        Окружность — это по сути множество точек на плоскости, на заданном радиусе от центра. Радиус — фундаментальный параметр, а диаметр — вторичный. Именно по этому справедливая константа окружности — тау, а не пи.
                                                                                                                          +1
                                                                                                                          Зато в физическом мире все трубы в диаметрах. Оттуда, видимо, и пошло.
                                                                                                                            +2

                                                                                                                            Диаметр измерять легко, а радиус у трубы так сходу не измерить.

                                                                                                                        +1
                                                                                                                        Часто в жизни возникают моменты, когда ты что-то придумываешь, а тебя осекают фразами вида «так неудобно». Ты начинаешь рефлексировать, включать режим отладки головного мозга, — только ради того, чтобы прийти к выводу, что «неудобно == непривычно».
                                                                                                                        В некоторых случаях переходить на удобно будет достаточно дорого, чтобы отказываться от привычного, взять те же s-выражения, отталкивающие людей одним своим видом.
                                                                                                                          +3
                                                                                                                          Потом в Египте придумали концепцию нуля/ноля
                                                                                                                          В Вавилоне придумали, в Египте нуля не знали. Но это так и осталось в Вавилоне, последующие цивилизации не были знакомы с этой концепцией, пока в V веке в Индии её не переизобрели. Далее она попала к арабам, а от них — к европейцам.

                                                                                                                          А ещё индейцы майя совершенно независимо придумали ноль ещё до начала нашей эры, но с их математикой европейцы познакомились много позже.
                                                                                                                            +5

                                                                                                                            Про ширину зада лошади было?


                                                                                                                            анекдот

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


                                                                                                                            Почему?


                                                                                                                            Дело в том, что двигатели эти доставлялись по железной дороге, которая проходит по узкому туннелю. Расстояние между рельсами стандартное: 4 фута 8.5 дюйма, поэтому конструкторы могли сделать двигатели только шириной 5 футов.


                                                                                                                            Возникает вопрос: почему расстояние между рельсами 4 фута 8.5 дюйма?


                                                                                                                            Откуда взялась эта цифра?


                                                                                                                            Оказывается, что железную дорогу в Штатах делали такую же, как и в Англии, а в Англии делали железнодорожные вагоны по тому же принципу, что и трамвайные, а первые трамваи производились в Англии по образу и подобию конки. А длина оси конки составляла как раз 4 фута 8.5 дюйма!


                                                                                                                            Но почему?


                                                                                                                            Потому что конки делали с тем расчетом, чтобы их оси попадали в колеи на английских дорогах, чтобы колеса меньше изнашивались, а расстояние между колеями в Англии как раз 4 фута 8.5 дюйма!


                                                                                                                            Отчего так?


                                                                                                                            Да просто дороги в Великобритании стали делать римляне, подводя их под размер своих боевых колесниц, и длина оси стандартной римской колесницы равнялась… правильно, 4 футам 8.5 дюймам! Ну вот теперь мы докопались, откуда взялся этот размер, но все же почему римлянам вздумалось делать свои колесницы с осями именно такой длины? А вот почему: в такую колесницу запрягали обычно двух лошадей. А 4 фута 8.5 дюйма — это был как раз размер двух лошадиных задниц! Делать ось колесницы длиннее было неудобно, так как это нарушало бы равновесие колесницы.


                                                                                                                            Следовательно, вот и ответ на самый первый вопрос: даже теперь, когда человек вышел в космос, его наивысшие технические достижения напрямую зависят от РАЗМЕРА ЛОШАДИНОЙ ЗАДНИЦЫ ДВЕ ТЫСЯЧИ ЛЕТ НАЗАД.

                                                                                                                              0
                                                                                                                              Да-да. Я еле удержался, чтобы в саму статью его не вставить :)
                                                                                                                              +2

                                                                                                                              10-тичная система счисления была выбрана из-за того, что человеку удобно опрерировать 10 пальцами, но кто сейчас пользуется пальцами при расчетах? Самая оптимальная система счисления — близкая к основанию натуральных логарифмов, т.е. к 2,718… Если округлить до целого — то троичная, ну либо двоичная. Если все же нужна краткость записываемых чисел, то можно использовать системы с кратными основаниями: 2, 3, 4, 8, 9, 16. В крайнейм случае можно было бы выбрать 12 как число с большим количеством делителей, что немаловажно при расчетах: 2, 3, 4, 6. Но 10-тичная, увы, стала мировым стандартом.


                                                                                                                              Ок, выбрали 10-тичную, но зачем количесто часов в сутках делать в 12-ричной системе? Если с количеством суток в месяце и дней в годе все еще более понятно — они привязаны к оборотам луны и солнца, то чем обоснован выбор системы счисления для часов в сутках, минутах в часе и секунд в минуте?

                                                                                                                                +4

                                                                                                                                Человеку удобно и в 12-ричной работать. Сюрприз, сюрприз. Как так? А вот так — у Вас на 4-х пальцах 12 суставов (большой палец не в счет). Вероятно отсюда же — 12 месяцев, 60 секунд, 60 минут (ну, там шумеры еще вроде подгадили). Еще отсюда же вроде названия числительных во многих языках (не задумывались о французских названиях, или, например, английский — ten, eleven, twelve, а потом уже по шаблону 10+x)?
                                                                                                                                Не вижу особых причин, почему не могли прижиться еще 5-ричная система (5 пальцев на одной руке) или 20-ричная (руки + ноги).


                                                                                                                                то чем обоснован выбор системы счисления для часов в сутках, минутах в часе и секунд в минуте?

                                                                                                                                ну, как я выше сказал. Шумеры. 12 месяцев в году (или все-таки они руководствовались упихиванием лунных циклов в солнечный — хз), потом в ДНЕ (как световом дне) = 12 часов. И столько же ночью (ну, суммарно 24, ага). Потом минуты как производная единица (понятно, что минуты начали считать не сразу) — 5*12=60 (откуда коэффициент 5 — для меня = загадка, возможно, опять магия подсчета на руках)? Секунду — как secunda minuta, т.е. деление по той же схеме, что и часа на минуты.

                                                                                                                                  +1

                                                                                                                                  Задумывался — есть же даже термин "дюжина". 12-ричная еще норм — как я писал, у нее много делителей. Если бы ее использовали для всего, мир был бы чуточку лучше. А пальцы не ноге неудобно использовать.

                                                                                                                                    0
                                                                                                                                    у Вас на 4-х пальцах 12 суставов

                                                                                                                                    Да откуда вы такие (со скелетным строением, близким к приматам) берётесь? :)

                                                                                                                                      +1

                                                                                                                                      Ну я бы не сказал, что у меня какие-то сверхгибкие руки (скорее, наоборот), но дотянуться большим пальцем до каждой фаланги мизинца — не вижу проблем. Но профессиональные музыканты могут сильно больше.
                                                                                                                                      Хотя, да, согласен, что есть разные варианты. Я спокойно нажимаю на стандартной десктопной клавиатуре Ctrl+L одной рукой, но знаю таких, что не могут.
                                                                                                                                      Увы, если у вас это не получается, то у вас хоть и штатный, но достаточно редкий вариант.

                                                                                                                                    +1

                                                                                                                                    Где-то в параллельной вселенной, где у людей по шесть пальцев на руках, а не по пять, математика у них развивалась ударными темпами, и сейчас они уже достигли технологической сингулярности, и вот-вот построят портал в нашу вселенную — тогда заживем.

                                                                                                                                      +1
                                                                                                                                      Самая оптимальная система счисления — близкая к основанию натуральных логарифмов, т.е. к 2,718…

                                                                                                                                      А вы смотрели, в чём тут определяется "оптимальность"? Да, есть такая теорема. Но дьявол — в её условии: ставится высокая цена за введение множества разных символов. И вот это условие как раз малоприменимо к человеческому общению: до 10-20 различных знаков не стоит ничего; наоборот, цена за удлинение самого представления числа сильно выше.
                                                                                                                                      Поэтому лучше её тут вообще не вспоминать.


                                                                                                                                      то чем обоснован выбор системы счисления для часов в сутках, минутах в часе и секунд в минуте?

                                                                                                                                      Легаси, сэр. FYI: при Французской революции были проекты и это переделать (на 405050 или 10100100).

                                                                                                                                        +1
                                                                                                                                        И вот это условие как раз малоприменимо к человеческому общению: до 10-20 различных знаков не стоит ничего

                                                                                                                                        Ну так выбрали бы 12 — было бы удобней из-за количества делителей или 8 или 16 — из-за лучшей совместимости с цифровыми форматами и тоже из-за количества делителей.

                                                                                                                                          0

                                                                                                                                          Это другой вопрос, но тут стоит подумать, откуда таки пришли к 10 — это интересный результат.
                                                                                                                                          Есть сильные намёки, что индоевропейская система переходила от 4 к 8 и далее к 10 — это предполагается из-за этимологий древнего 8 как удвоенного 4, а 9 как "новое" (neu- в обоих случаях). Если бы не этот переход, мы могли бы остаться с восьмеричной системой… а вот почему таки состоялся переход — тут как раз корневой вопрос. Но почему-то практически у всех устный счёт идёт по 10 и 20, несмотря на то, что письменный ещё с Шумера и Египта — по 12 и 60. Тут победила устная традиция, и даже интересно, откуда древний счёт по 4, почему не считался большой палец, если он тому причиной ;)

                                                                                                                                            0
                                                                                                                                            откуда древний счёт по 4, почему не считался большой палец, если он тому причиной ;)
                                                                                                                                            Им считали при счёте одной рукой?
                                                                                                                                            С учетом сгибания 4-х пальцев для отмечания количество четверок, можно считать вплоть до 20, где большим пальцем показываешь на число в итоговой четверке)
                                                                                                                                        0
                                                                                                                                        Вавилонские цифры были 10x6-ричными.
                                                                                                                                        +2
                                                                                                                                        Откуда пошло лево/право по первичной оси X – я думаю, что из письменности.

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

                                                                                                                                          0
                                                                                                                                          А что, удобно наверное. Правда как определять, в какую сторону читать произвольную строку…
                                                                                                                                            +3

                                                                                                                                            Для машины не удобно определять, да. Человеку проще — увидит "абырвалг", подсознательно распознает слово и чуть более сознательно перескочит на другой конец строки.

                                                                                                                                              0
                                                                                                                                              Это для азбуковой письменности. Для иероглифической придётся парсить минимум пару слов.
                                                                                                                                                +2

                                                                                                                                                Ага, вот я сам в ловушку инерционности мышления и попался. :D


                                                                                                                                                К слову, это был бы прекрасный жанр поэзии: делать стихотворения, которые можно было бы читать в обе стороны.

                                                                                                                                                  +2
                                                                                                                                                  К слову, это был бы прекрасный жанр поэзии: делать стихотворения, которые можно было бы читать в обе стороны.

                                                                                                                                                  ну, с анаграммами и палиндромами народ вовсю играется )))

                                                                                                                                                    0
                                                                                                                                                    0
                                                                                                                                                    Для иероглифической придётся парсить минимум пару слов.

                                                                                                                                                    Только для симметричных кандзи, которых не так уж и много, плюс за раз человек читает гораздо больше чем один символ.
                                                                                                                                                      0
                                                                                                                                                      Предлагаете зеркалить кандзи при таком написании? Я думал они как «абырвалг» будут, только последовательность обратная.
                                                                                                                                                        0
                                                                                                                                                        commons.wikimedia.org/wiki/File:Crete_-_law_of_Gortyn_-_boustrophedon.JPG

                                                                                                                                                        Алфавитная письменность, но всё равно в каждой строке знаки «смотрят» в направлении письма.
                                                                                                                                                          +1
                                                                                                                                                          Хотя даже симметричные кандзи, при традиционном написании с помощью кисти(или перьевой ручки) будут различаться, поскольку там важно направление письма. То есть достаточно одного единственного символа, и вопрос между R или Я не встанет.image
                                                                                                                                                        0
                                                                                                                                                        Нет, потому что при записи «в обратную сторону» знаки отражали зеркально.
                                                                                                                                                    0
                                                                                                                                                    Счастливые древние вавилоняне, при таком способе письма у них не было причин для наших проблем с различными кодировками CRLF/CR/LF. Кстати, это ещё одна тема для этой статьи, в жизни разброд в кодировках перевода строки напрягает гораздо чаще, чем little/big endian.
                                                                                                                                                      0
                                                                                                                                                      А именно поэтому 'to be continued' стоит. Готовлю вторую часть :) Там будет как раз про даты, кодировки, обратные слэши и т.п.
                                                                                                                                                      +1
                                                                                                                                                      Древние греки тоже так пописывали. Бустрофедон называется (т.е. ход вола на пашне).
                                                                                                                                                      +2
                                                                                                                                                      Если требуется собрать несколько сегментов встык

                                                                                                                                                      А какое отношение это имеет именно к индексации?
                                                                                                                                                      То что диапазоны бывают удобны в таком виде, понятно, но от способа индексации в используемом ЯП это не зависит. «Магические» единицы вовсе не магические, и вылазят они независимо от индексации. Например, в том же цикле FOR i := 0 TO LEN(ARR) - 1 DO
                                                                                                                                                      Вы будете везде вычитать единицу, где нужен последний элемент. Просто сдвинули неудобство в другую сторону. А где нужен предпоследний, там вообще 2.
                                                                                                                                                      Что еще? Например, мы любим отрезать префиксы так (go или python):
                                                                                                                                                      x = s[len(prefix):]
                                                                                                                                                      Единицы нету, но ее нету не потому что индексация такая удачная, а потому что len() тут выступает в качестве оператора «индекс на 1 больше последнего». Магический тут именно len(), а вовсе не 1, с которой код наоборот прямолинейно выражает что мы делаем.
                                                                                                                                                      Не исключаю, что именно магия len() и очаровала впечатлительных технарей в свое время. Магия из разряда x = y++;, и прочих игрушек для самовыражения, от которых новые языки уже отказываются.
                                                                                                                                                      Но в некоторых случаях действительно удобно делать с 0. Когда, например, вычисляем i = y*w+x. Тут y должен быть с нуля, а вот x уже без разницы. Такой расчет будет при любом варианте индексации.

                                                                                                                                                      Машинам с 0 проще, это да. Но людям все таки удобнее мыслить с 1. Когда я хочу чтоб мне дали второй слева предмет, я так и прошу (и мыслю). Сколько бы я не программировал, мыслю я все равно иначе. И len() удобнее мыслить как последний индекс. len()-1 предпоследний, len()+1 следующий за последним и т.д.

                                                                                                                                                      Диапазоны [i, j) тоже надо использовать только когда они реально нужны.
                                                                                                                                                      Насколько быстро вычислите в уме?
                                                                                                                                                      s = "abcdefg"
                                                                                                                                                      s[2:5]+s[1:3]

                                                                                                                                                      представьте насколько лучше читались бы срезы, если не привлекать тут концепции, которые на самом деле не к месту:
                                                                                                                                                      s = "abcdefg"
                                                                                                                                                      s[3:5]+s[2:3]

                                                                                                                                                      С 3 буквы по 5, плюс со 2 буквы по 3. Чем же питоновый вариант лучше этого?

                                                                                                                                                      Я сам много лет, как и большинство программистов, использую индексацию с 0, и она прошита уже в подкорке. Но удобство ее все таки считаю притянутым за уши. В том же питоне и срезы и range() сделаны так, будто всеми силами натягивали сову на глобус, лишь бы «магические» единицы не вылезли. И что, удобно оно в питоне? Честно говоря, не ощущается.

                                                                                                                                                      ps Я не агитирую за индексацию с 1. Мне без разницы вообще. Просто так картина полнее.
                                                                                                                                                      pps А индексация с 0 никуда не денется потому что уже стандарт.
                                                                                                                                                        +2
                                                                                                                                                        Черт его знает, но когда на первом курсе универа мне пришлось переходить с индексации [1..n] на [0..n-1] оказалось, что вторая — гораздо удобнее в вычислениях.
                                                                                                                                                        Индекс в массивах ведь задает не номер элемента а смещение от начала. Подумайте об этом.
                                                                                                                                                          +2
                                                                                                                                                          Это удобство имхо ощущается только на c/c++ из-за индексируемых указателей. В других языках уже не так. В том же Lua, например, никаких проблем с индексацией нет (она там с 1). Мне довелось много лет пользоваться обоими вариантами. Никакой разницы в удобстве программирования не замечаю. Есть небольшая разница только в когнитивной нагрузке при чтении кода.
                                                                                                                                                            0
                                                                                                                                                            Есть разница в том, что процессору приходится тратить лишние такты на преобразование этой единицы в смещение. Но ALU нынче дешёвое.
                                                                                                                                                            +2
                                                                                                                                                            Индекс в массивах ведь задает не номер элемента а смещение от начала. Подумайте об этом.

                                                                                                                                                            Ситуация как раз обратная: обычно индекс массива — это номер элемента, а не смещение. По крайней мере в прикладном программировании, за системное не скажу.


                                                                                                                                                            Под вычислениями с индексами вы имеете в виду что-то в духе перевода между одномерной и многомерной индексацией одного и того же массива и т.п.? Этого в коде лучше избегать в явном виде, независимо от старта с 0/1, и пользоваться соответствующими абстракциями написанными один раз (хорошо если они в стандартной библиотеке). И багов меньше будет, и код понятнее.

                                                                                                                                                            0
                                                                                                                                                            Я согласен, что смешал base-1 и [A;B) аргументацию в одном флаконе. В целом это разные вещи.
                                                                                                                                                            0

                                                                                                                                                            Сенсационное открытие, при эволюционном развитии новое базируется на уже существующем!


                                                                                                                                                            Из-за этого паскалевские конструкции вида FOR N := 1 TO N DO излишне нагружают ALU либо превращаются в квест для компилятора.

                                                                                                                                                            Какая «нагрузка», какой «квест»?
                                                                                                                                                            Что при начале с 0, что с 1 всё сводится к inc/cmp/jXX. А если значение N явно не используется, то и вовсе до dec/test/jnz


                                                                                                                                                            Теги: #math #realworld

                                                                                                                                                            Здравствуй, твиттор!

                                                                                                                                                              0
                                                                                                                                                              и никаких SIB выкрутасов для этого не потребуется, чтобы вертеть каждые 4 байта на ALU. В случае big-endian – welcome to hell.

                                                                                                                                                              Видно, имеется в виду, что оптимизации уровня "тут проще работать с индексом, уменьшенным на 1" стали доступны в компиляторах только пост-TurboPascal волны.


                                                                                                                                                              Что при начале с 0, что с 1 всё сводится к inc/cmp/jXX.

                                                                                                                                                              Нет, современные компиляторы обычно сдвигают индексацию в таких случаях. Не уверен, что это всегда полезно, но, видимо, явно такое добавили в правила.

                                                                                                                                                                0
                                                                                                                                                                Я не FOR i:=1 TO N часть ассемблерного кода имел в виду, а про работу дальше с ним по какому-нибудь массиву, т.е. A[i]. который определён как [1..100]. Либо придётся лишний элемент вставлять в начало массива, чтобы 'i' сразу было применимо, либо каждый раз выполнять DEC/SUB ESI/EDI. Либо SIB выкрутасы. Либо цикл умно компилировать, чтобы он для программиста выглядел как 1..N, а для процессора как 0..N-1.
                                                                                                                                                                  0
                                                                                                                                                                  Либо цикл умно компилировать, чтобы он для программиста выглядел как 1..N, а для процессора как 0..N-1.

                                                                                                                                                                  Скажу больше — в асме оно зачастую идёт в обратную сторону, от N-1 до 0, по соображениям каких-то там оптимизаций.
                                                                                                                                                                    +1
                                                                                                                                                                    Тут очень просто — при счете до 0 не надо в каждой итерации вспоминать значение конечной точки отсчета и сравнивать с ним, оно фиксировано:

                                                                                                                                                                    счетчик = N;
                                                                                                                                                                    loop:
                                                                                                                                                                    <тело цикла>;
                                                                                                                                                                    -- счетчик;
                                                                                                                                                                    если не ноль, то переход на loop;
                                                                                                                                                                    exit:


                                                                                                                                                                    vs

                                                                                                                                                                    счетчик = 1;
                                                                                                                                                                    loop:
                                                                                                                                                                    <тело цикла>;
                                                                                                                                                                    регистр = N;
                                                                                                                                                                    сравнить счетчик с регистром;
                                                                                                                                                                    если равны, то переход на exit;
                                                                                                                                                                    ++ счетчик;
                                                                                                                                                                    переход на loop;
                                                                                                                                                                    exit:

                                                                                                                                                                0
                                                                                                                                                                Но вот незадача — у них по каким-то причинам пишут справа налево (об этом ниже), а импортировали as is, и с тех пор пишем числа от старшего разряда к младшему, хоть глазами и бегаем слева направо.

                                                                                                                                                                Это неверно. Запись в современной десятичной системе разработана в Индии, где пишут точно так же, как у нас, слева направо, и числа пишутся начиная со старших разрядов. Но, да, оно прошло через арабов, поменяв порядок один раз при приходе к ним и второй — при приходе в Европу, восстановив тем самым исходный порядок.


                                                                                                                                                                Более того, переход к счёту начиная со старших зафиксирован как минимум в развитии большинства индоевропейских языков. Для общеиндоевропейского восстанавливается порядок типа "один десять сто...", но сейчас это осталось только в некоторых языках в раритетах типа "ein zwanzig".


                                                                                                                                                                Так что для апологетизма little endianness надо найти более серьёзные основания, чем неверные аналогии.


                                                                                                                                                                и никаких SIB выкрутасов для этого не потребуется, чтобы вертеть каждые 4 байта на ALU. В случае big-endian – welcome to hell.

                                                                                                                                                                Я работал с обоими… нет ада, просто надо другой комплект привычек.

                                                                                                                                                                  0
                                                                                                                                                                  Так что для апологетизма little endianness надо найти более серьёзные основания, чем неверные аналогии.
                                                                                                                                                                  Основной довод — работа с длинной арифметикой. Простые операции вроде сложения/вычитания можно провернуть как Base-2^32, не переполняясь. А умножение уже может потребоать Base-2^8 подхода по тому же самому массиву цифр. При little-endian эта работает as is с простыми i++ циклами. При big-endian приходится обрабатывать байты в порядке 3-2-1-0-7-6-5-4-…
                                                                                                                                                                    +2
                                                                                                                                                                    А умножение уже может потребоать Base-2^8 подхода по тому же самому массиву цифр.

                                                                                                                                                                    Практика библиотек вроде GMP показывает, что ничего такого не происходит. Умножение по 8 бит — не нужно, потому что все нормальные процессоры, если имеют сложение чисел по N бит, имеют и умножение N*N в 2N бит (а те, что не умели такое, закончились где-то с 8086 и 6800). И им не нужно разделять числа на части для умножения.


                                                                                                                                                                    Сами же библиотеки длинной арифметики работают абсолютно независимо от этого: у них своя логика определяет, что лежит в одном элементе (лимбе, в терминах GMP), массив лимбов чаще little-endian (по смещению 0 минимальный), но иногда и big-endian (никакой проблемы в реализации нет, просто надо чуть внимательнее кодить), поэтому на SystemZ, SPARC и прочих получаются варианты типа "little-endian array of big-endian words (limbs)" и опять же никого это не смущает.


                                                                                                                                                                    У big endian есть другая проблема — она выглядит так. Естественная нумерация "0 старший" приводит к проблемам понимания при расширении, цитирую, "В случае z/Architecture использование стиля 0=MSB приводит к необходимости внимательно учитывать контекст нумерации; одни и те же биты могут называться 0-31, если регистр рассматривается как 32-битный (только 32 младших бита полного 64-битного регистра), и 32-63, если он же рассматривается как 64-битный; и наоборот, имея номер бита менее 32, надо знать, о какой части регистра идёт речь. Иногда приходится вдумываться и гадать на контексте."


                                                                                                                                                                    По моему мнению, это самая крупная проблема от BE, остальны