技术内参 | 数据分析,如何解决精度丢失的问题?

本文探讨了在大数据分析中遇到的精度丢失问题,特别是对于虚拟货币企业而言,高精度至关重要。文章介绍了精度丢失的原因,包括二进制小数、IEEE 745 标准和浮点格式转换,并提出了解决精度丢失的方法,如避免使用 JSON.parse 解析大浮点数,使用特定库进行高精度运算。此外,文章还提及了神策数据的热招岗位,如大数据前端工程师。
摘要由CSDN通过智能技术生成

 

 

本文由神策数据技术大咖皮成投稿

谈到大数据技术,数据采集和计算是永远绕不开的话题,采集的准确度、计算的精度都是做数据分析的前提条件。

神策数据服务的客户覆盖互联网各个细分领域,其中不乏有做目前大火的虚拟货币的客户,比如涉及区块链和比特币领域的客户,从接触之初,他们对大数据工具的要求就极其严苛,当然,这与虚拟货币自身的特点也分不开。

事实上,每个虚拟货币的精确程度小到小数点后 4 位,大到小数点后 12 位。客户在分析用户每次成交的货币量,每日的人均成交货币量等指标,或者在分布分析中查看比持币的分布情况时,常常是需要精确到小数点后 8 位甚至更多。

因为虚拟货币的单价不同,更高的精确度可以让客户更加精准的细分出用户群,进而进行更深度的分析。高精度确保了分析结果的准确性,甚至决定了虚拟货币企业的核心竞争力。

所以,虚拟货币企业对精度的要求极高也不足为奇了。不过,在用 JavaScript 开发数据可视化产品时,会遇到数值的展现和计算丢失精度的问题,这是很多技术者想要解决的难题。下面我们从两方面来为你解决这个问题:

一、为什么会出现精度的丢失?

二、如何解决精度丢失问题?

下面我们先介绍下计算精度的背景:

1. 二进制小数

在十进制中,123.45 可以表示为 1 × 10² + 2 × 10¹ + 3 × 10⁰ + 4 × 10⁻¹ + 5 × 10⁻² = 123 ⁴⁵⁄₁₀₀,小数点的位置决定了数字的权重,左边的数是 10 的正幂,右边的数是 10 的负幂。

类似,二进制数 101.11 也可以表示为 1 × 2² + 0 × 2¹ + 1 × 2⁰ + 1 × 2⁻¹ + 1 × 2⁻² = 4 + 0 + 1 + ¹⁄₂ + ¹⁄₄ = 5 ³⁄₄,小数点向左移动一位相当于这个数被 2 除,小数点向右移动一位相当于这个数乘以 2。

在有限的长度下,十进制无法准确表示像 ¹⁄₃、⁵⁄₇ 这样的数,二进制也无法准确表示像 ¹⁄₅ 这样的数,增加数字的长度可以提高表示的精度。

2. IEEE 745 标准

IEEE 745 定义了在计算机中浮点数的表示及其运算的标准,标准指定了两种基本浮点格式:单精度和双精度,两种扩展浮点格式:单精度扩展和双精度扩展。

浮点格式是一种数据结构,用于指定包含浮点数的字段、这些字段的布局及其算术解释。浮点存储格式指定如何将浮点格式存储在内存中,具体选择哪种存储格式由实现工具决定,JavaScript 采用的是 IEEE 745 双精度浮点格式。

IEEE 浮点标准用 V = (−1)ˢ × 2ᴱ × M 的形式来表示一个数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值