写点什么

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

  • 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:514282
用户头像
万佳 前InfoQ编辑

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

关注

评论 1 条评论

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

可视化协助矿山,打造“高效率运营战略”,年降成本500W

一只数据鲸鱼

数据可视化 工业4.0 智慧矿山

详解 Go 程序的启动流程,你知道 g0,m0 是什么吗?

煎鱼

Java php 后端 Go 语言

测试工程师如何收拾交接项目的烂摊子

陈磊@Criss

测试

公安情报研判分析系统解决方案,合成作战系统搭建

WebRTC 传输安全机制第二话:深入显出 SRTP 协议

阿里云CloudImagine

音视频 WebRTC 通信 流媒体开发 SRS流媒体服务器

80后自立门户,90后异军突起,中国投资新势力加速崛起 | 创业邦2021年40位40岁以下投资人重磅发布

创业邦

创业

关于Redis分布式锁的那些事

Hex

redis 后端

校友会小程序开发笔记四:UI基本元素设计

CC同学

小程序云开发

2021年版,拼多多/阿里/今日头条/京东 Java面经大合集(含答案)

Java架构师迁哥

专科小伙豪取三杀,斩获阿里、京东和蚂蚁Java岗offer的原因找到了!

北游学Java

Java 面试

[译] 规避供应商以及特定版本的 VM Bugs

Antway

6月日更

谁说双非本就一定无缘阿里!(四年crud经验已拿下P7)面经分享

Java 程序员 架构 面试 计算机

数据库设计的 10 个最佳实践

xcbeyond

数据库 数据库设计 6月日更

🌏【架构师指南】分布式技术知识点总结(下)

洛神灬殇

分布式 架构设计 6月日更

开发者如何构建技术影响力

不脱发的程序猿

程序人生 开发者如何构建技术影响力 技术影响力

pprof排查Golang服务内存问题

循环智能

pprof 性能分析 Go 语言

凭这份pdf每天花2小时学习,3个月后拿下阿里/美团/京东等offer

Java 程序员 架构 面试

分布式能解决一切问题吗?百度架构师为你解答架构真正奥义!

Java架构师迁哥

搭建Prometheus+Grafana的云平台监控系统

学神来啦

云计算 Linux 运维 开发日志

移动开发iOS,薪资如何?待遇怎样!

ios开发 iOS 知识体系

第六课作业

杰语

Bzz节点分币系统开发,云算力矿机租赁系统搭建

Flink User-Defined Source

Alex🐒

flink 翻译 Flink扩展 flink1.13

iOS开发21年6月面试总结(未完待续~)

iOSer

ios 面试 ios开发 iOS 知识体系

🌏【架构师指南】分布式技术知识点总结(上)

洛神灬殇

分布式 raft协议 paxos协议 6月日更

在线图片坐标拾取工具

入门小站

终端架构深研,CodeDay 成都站等你

蚂蚁集团移动开发平台 mPaaS

flutter mPaaS Codeday Meetup

校友会小程序开发笔记三:数据库设计

CC同学

小程序云开发 校友录小程序 校友会小程序

5W1H聊开源之Who/When/Where——谁在何时何地“发明”了开源?

禅道项目管理

Linux 开源 软件

新思科技宣布收购 Code Dx公司 添加软件漏洞关联、优先级和合并风险报告

InfoQ_434670063458

新思科技

网易有道开源EMLL:高性能端侧机器学习计算库,大幅提高计算性能

有道技术团队

人工智能 机器学习 高性能计算 端侧AI

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