Ошибка недели Вот программный гремлин, который привлек наше внимание на этой неделе: цена акции превысила 32-битный беззнаковый целочисленный предел кода фондовой биржи.

Berkshire Hathaway — это инвестиционная группа, известная не только тем, что ею управляет магнат-миллиардер Уоррен Баффет, но и потому, что ее акции BRK.A стоят смехотворно: на момент написания статьи — 435 120 долларов США (312 818,65 фунтов стерлингов) за штуку. Он котируется на Нью-Йоркской фондовой бирже, на которую не влияет следующая ошибка.

Во вторник биржа Nasdaq прекратился передача информации об акциях на своем веб-сайте и в потоках брокерам и другим финансовым организациям. На веб-странице акции просто написано: «Данные в настоящее время недоступны».

Это потому, что значение BRK.A превышает максимальное значение, которое по крайней мере некоторые части программного обеспечения Nasdaq могут безопасно обрабатывать.

И все потому, что Nasdaq использует 32-битные целые числа без знака для записи и отправки котировок акций. Максимальное значение такой 32-битной переменной — 2.32 — 1, или 0xffffffff в шестнадцатеричном формате или 4 294 967 295 в десятичном.

Nasdaq решила не хранить цены, используя формат чисел с плавающей запятой, обычно встречающийся в приложениях, вероятно, потому что они могут быть приблизительный, и вместо этого решил умножить кавычки на 10 000 и сохранить их как 32-битные целые числа без знака. Например, значение 123 456 будет представлять цену акции в размере 12,3456 долларов США с точностью до сотых долей пенни. Стоимость 7 890 000 соответствует цене акции 789,0000 долларов.

Таким образом, цена BRK.A в размере 435 120,0000 долларов будет сохранена как 4 351 200 000, что превышает максимум 4 294 967 295, и выльется за край до некоторого значения, намного меньшего, чем фактическая цена акций. Фактически, значение будет циклически изменяться от максимума до нуля и фактически проходит от нуля до 56 232 704, или 5 623 2704 доллара.

Читайте также:
Невероятный скандал вокруг Windows 10 набирает обороты

Если бы ошибочная цена была передана миру по Nasdaq, случился бы бедлам. Представьте, что вы думаете, что можете выкупить акции Berkshire Hathaway менее чем за 6000 долларов за штуку, или что ваши запасы акций внезапно рухнули?

Nasdaq заявила, что обновит свое программное обеспечение, чтобы исправить проблему, к 17 мая, и прекратила разглашение данных BRK.A до того, как они перегрузятся. Решением может быть использование 64-битных целых чисел без знака, что даст вам возможность обрабатывать максимальное значение 18 446 744 073 709 551 615 или цену акции 1 844 674 407 370 955,1615. На данный момент это достаточно места для передышки.

90-летний Баффет не сдвинется с места, разделив акции своей группы класса А, чего бы они ни стоили, вот почему они намного выше, чем что-либо еще на рынке.

Между тем, биржа IEX остановился прием заказов на BRK.A в середине марта «из-за внутреннего ценового ограничения в торговой системе. Любые заказы, отправленные с этим символом, будут отклонены до дальнейшего уведомления». Для нас это звучит так, как будто у него та же проблема, что и у Nasdaq.

Удачно, BRK — мнемоника кода сборки процессора 6502 для точки останова, которую можно использовать для устранения неполадок в программе, которая пошла не так. ®

Наконечник шляпы для Wall Street Journal для выделение этот недостаток ранее на этой неделе.