【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

一只天价股票致纳斯达克系统“崩了”!

  • 2021-05-13
  • 本文字数:1524 字

    阅读完需:约 5 分钟

一只天价股票致纳斯达克系统“崩了”!

伯克希尔 - 哈撒韦公司最近又火了一把,不是因为股神巴菲特(公司掌门人),而是其天价股票导致纳斯达克系统“崩了”。

天价股票

据美国广播公司 8 日报道,伯克希尔 - 哈撒韦 A 类股票(BRK.A)的交易价格目前已超过每股 42.1 万美元,并呈现上升趋势,5 月 7 日攀升至 43.7 万美元上方。这个消息虽然令投资者士气高涨,但是却给纳斯达克的系统带来了隐患。



由于 BRK.A 的股价过高,以至于纳斯达克的电脑系统已经无法记录这一价格。因此,纳斯达克交易所从本周二开始暂停播报 BRK.A 的价格——其网站相关页面中仅显示:“当前无可用数据”。


此外,IEX 交易所于 3 月中旬决定停止接收 BRK.A 交易单,理由是“受我方交易系统内部价格数值上限的影响,我们将拒绝一切以原有符号格式表示的交易单,直至另行通知”。看起来,他们似乎遇上了与纳斯达克一样的问题。


针对此事,有网友评论:股价太高,以至于纳斯达克的系统无法报出这个价格,不得不为这只全世界独一无二的股票升级系统... 就像当年的千年虫问题,都是因为“硬编码”。


硬编码(Hard Code 或 Hard Coding)是指在软件实现上,将输出或输入的相关参数(例如:路径、输出的形式或格式)直接以常量的方式撰写在源代码中,而非在运行期间由外界指定的设置、资源、资料或格式做出适当回应。一般被认定是种反模式或不完美的实现,因为软件受到输入资料或输出格式的改变就必须修改源代码,对客户而言,改变源代码之外的小设置也许还比较容易。

Bug 出在哪?

受到市场上涨和 2020 年疫情影响后恢复盈利的推动,沃伦·巴菲特的公司股票价格今年已经上涨了 20% 以上。但是,天价股票却让纳斯达克的交易系统撑不住了。


据了解,纳斯达克一直用一种紧凑的计算机格式记录股票价格,这种格式使用 32 位,即 1 和 0。最大的数字可能是 2 的 32 次方减去 1,即 4,294,967,295。股票价格经常使用小数点后四位来表示,所以能显示的最高价格是 429,496.7295 美元。使用占用内存较少的紧凑格式可以让软件更有效率,这在电子股票交易领域是一个高度优先事项。


没有其他股票能接近 BRK.A 的最高价格水平,所以可以理解为什么纳斯达克系统背后的工程师选择了这种数字格式,程序员称之为“四字节无符号整数”( four-byte unsigned integer )。


据 The Register 分析,纳斯达克之所以没有选择其他交易所常用的浮点数格式进行股价存储,可能是考虑到后者属于近似值,因此,他们决定将价格乘以 10000 再存储为 32 位无符号整数。


例如,这里的 123,456 代表股票价格为 12.3456 美元,可以精确至一美分的百分之一。值为 7890000 美元的股价,其实际含义则为 789.0000 美元。


顺着这个思路,可以看到伯克希尔·哈撒韦 A 类(BRK.A)单股 435120.0000 美元的价格会被存储为 4351200000,超出了 4294967295 的上限并溢出为某个远低于实际股价的值。实际上,股价经历了一番归零回绕,并最终被计为 56232704,即 5623.2704 美元。


这个价格一旦被纳斯达克公开发布,伯克希尔·哈撒韦绝对要遭受重创。换句话说,我们将能以低于 6000 美元的单股价格狂收公司股票……或者说,我们自己手里的股票也可能被他人迅猛“收割”。

应对举措

目前,纳斯达克方面表示将抢在 5 月 17 日前更新软件以纠正这一问题,并第一时间叫停了 BRK.A 异常数据的发布。


可行的解决方案包括使用 64 位无符号整数,这样可以处理最大为 18,446,744,073,709,551,615 的数值,相当于每股价格 1,844,674,407,370,955.1615 美元。目前来看,应该不会有哪支股票能涨到这样的程度。


据悉,现年 90 岁的巴菲特坚持不因股价高涨而拆分手中的 A 类股票,伯克希尔·哈撒韦如此夸张的股价也正源于此。


顺带一提,BRK 正好是 6502 CPU 汇编代码中的断点助记符,可用于对出错的程序进行故障排查……这多少有点讽刺。

2021-05-13 13:514131
用户头像
万佳 前InfoQ编辑

发布了 677 篇内容, 共 336.1 次阅读, 收获喜欢 1795 次。

关注

评论 1 条评论

发布
用户头像
永远不要相信程序员说的够用!计算机世界类似的问题举不胜举,千年虫还记得吧?
2021-05-17 08:42
回复
没有更多了
发现更多内容

架构师训练营:第四周作业

zcj

极客大学架构师训练营

架构师训练营 第4周作业

Glowry

极客大学架构师训练营

聊聊Hystrix中的命令模式

老胡爱分享

Java 面试 设计模式 命令模式

【6月】本月读书学到了什么

Neco.W

读书感悟 阅读量

架构设计之常识篇

魔曦

架构师 极客大学架构师训练营

第四周作业

芒夏

极客大学架构师训练营

架构师训练营第四周作业

Melo

使用 Python 制作酷炫多彩的 Jenkins 插件词云图

donghui

jenkins wordcloud

架构师训练营第三周作业

陈靓-哲露

「架构师训练营」第 4 周 学习总结

guoguo 👻

极客大学架构师训练营

消息队列(四)如何处理消息丢失的问题?

奈何花开

Java MQ 消息队列

架构师训练营作业-20200627

caibird1984

极客大学架构师训练营

程序员面试与 HR 谈薪资技巧

张小方

程序员 面试 offer 年终奖 月薪

ARTS - Week Six

shepherd

Java algorithm

架构师训练营 第4周学习总结

Glowry

极客大学架构师训练营

架构师训练营总结-20200627

caibird1984

极客大学架构师训练营

前端存储除了 localStorage 还有啥

阿宝哥

Java 大前端 存储

极客时间架构师训练营 - week4 - 作业 1

jjn0703

极客大学架构师训练营

漫画:15张图,帮你看懂布隆算法

Java小咖秀

面试 算法 布隆过滤器

漫画:对象是如何被找到的?句柄 OR 直接指针?

王磊

Java 面试

Golang中的Interface(接口),全面解析

Eriol

接口 interface Go 语言

计算机操作系统基础(七)---作业管理之死锁

书旅

php laravel 线程 操作系统 进程

第四周总结

芒夏

极客大学架构师训练营

Python多重继承问题之MRO和C3算法

王坤祥

Python MRO C3算法 多继承

一张PDF了解JDK9 GC调优秘籍-附PDF下载

程序那些事

性能调优 GC JDK9 cheatsheet 秘籍

架构师是怎样炼成的 04-1互联网分布式系统架构演化

闷骚程序员

极客大学架构师训练营

理解了 1+2 的过程,你就理解了Java虚拟机

侯树成

JVM JVM原理

戴尔Latitude 9510 雅典娜计划标准的英特尔移动超能版笔记本

最新动态

极客大学算法训练营第一课

落曦

消息队列(五)如何保证消息的顺序性?

奈何花开

Java MQ 消息队列

架构师训练营第四周作业

W_T

一只天价股票致纳斯达克系统“崩了”!_架构_万佳_InfoQ精选文章