免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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

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

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

关注

评论 1 条评论

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

专访 | 罗成:开源并非“只可远观”

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

黄东旭:开发者的“技术无感化”时代,从 Serverless HTAP 数据库开始 | PingCAP DevCon 2022

PingCAP

TiDB

华为云数据库GaussDB(for Influx)揭秘:数据分级存储

路过的憨憨

HIFIVE音加加 × 火山引擎:正版曲库+智能视频创作SDK,短视频全链路需求一站式解决!

HIFIVE音加加

短视频 火山引擎 HIFIVE音加加 视频配乐 版权音乐

Fuzzing(模糊测试)的前世今生(下)

云起无垠

网络安全 漏洞挖掘 Fuzzing 模糊测试

ChaosBlade Java 场景性能优化,那些你不知道的事

阿里巴巴中间件

阿里云 云原生 ChaosBlade

数字化改变了什么?WeLink在实践中给出答案

路过的憨憨

让对外合作更高效,就用WeLink跨企业沟通

路过的憨憨

面对当下最热的多模态,为什么这些业界和学界专家说“不必追热点”

小红书技术REDtech

初识华为云数据库GaussDB(for Cassandra

路过的憨憨

AngularJS进阶(十)AngularJS改变元素显示状态

No Silver Bullet

AngularJS 12月月更 元素状态

AngularJS进阶(十一)AngularJS实现表格数据的编辑,更新和删除

No Silver Bullet

表格 AngularJS 12月月更

新变化新营销 这些知识点你得Get!(文末有PPT福利首次放送)

字节跳动数据平台

大数据 营销 12 月 PK 榜

技术分享 | 将覆盖反馈融入黑盒模糊测试技术提升测试效率

云起无垠

焱融全闪系列科普| 为什么 SSD 需要 NVMe?

焱融科技

云计算 高性能 nvme 文件存储 全闪存储

AngularJS进阶(十三)JS利用正则表达式校验手机号

No Silver Bullet

正则表达式 AngularJS 12月月更

Fuzzing(模糊测试)的前世今生(上)

云起无垠

OpenMLDB v0.6 新版本运维功能增强

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

Fuzzing(模糊测试)技术,你真的了解吗?

云起无垠

Fuzzing(模糊测试)的前世今生(中)

云起无垠

如何快速构建研发效能度量的指标体系?

Kyligence

数据分析 指标

观测云产品更新|应用性能新增服务清单功能;用户访问监测 Session 查看器调整;事件新增移动端跳转选项等

观测云

可观测性 观测云

升维数智化底座 迈向高质量发展

用友BIP

如何远程Debug内网(或者防火墙后)的Java服务

石臻臻的杂货铺

Java debug 后端

OpenMLDB 实时引擎性能测试报告

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

【Meetup 预告】OpenMLDB + MaxCompute:集成打通云上生态,高效构建 AI 应用

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

子查询优化之 Semi-join 优化 | StoneDB 研发分享 #2

StoneDB

MySQL HTAP 数据库· StoneDB 12 月 PK 榜

Proxyless Mesh 在 Dubbo 中的实践

阿里巴巴中间件

阿里云 云原生 dubbo

如何借助低代码开发平台 YonBuilder 填补应用开发 “产能缺口”?

YonBuilder低代码开发平台

开发者 低代码

云原生中的标准化

穿过生命散发芬芳

云原生 12月月更

直播 | 数据仓库?数据湖?停止纠结,流批融合的极速 Lakehouse来了!

StarRocks

#数据库

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