浮点数数据的存储、读取方法和计算机可读存储介质转让专利

申请号 : CN201911022177.0

文献号 : CN110825323B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡安保吴文斐朱建明

申请人 : 上海钒钛智能科技有限公司

摘要 :

公开了一种浮点数数据的存储、读取方法和计算机可读存储介质,根据预定的浮点数存储精度以及浮点数存储精度表征值对应关系获得浮点数数据的第一整数、精度表征整数,并将第一整数的绝对值、第一整数的符号位以及精度表征整数分别进行保存以确定具有固定长度的第一数据,然后通过连续位标识技术对第一数据进行变长编码以获得具有不固定长度的第二数据进行存储,从而实现了浮点数数据的压缩存储,降低了浮点数数据存储占用的空间和数据传输时间。

权利要求 :

1.一种浮点数数据的存储方法,其特征在于,所述存储方法包括:根据预定的浮点数存储精度将浮点数数据转换为对应的第一整数;

根据第一浮点数存储精度表征值对应关系获取与所述浮点数存储精度对应的第一精度表征整数并将所述第一精度表征整数保存到第一精度单元组;

获取所述第一整数的符号位,并将所述符号位保存到符号单元组;

将所述第一整数的绝对值保存到第一整数存储单元内;

根据所述第一精度单元组、符号单元组和第一整数存储单元确定具有固定长度的第一数据;

通过连续位标识技术对所述第一数据进行变长编码以获得具有不固定长度的第二数据进行存储。

2.根据权利要求1所述的存储方法,其特征在于,所述第一数据具有64个比特位。

3.根据权利要求1所述的存储方法,其特征在于,所述浮点数数据通过四舍五入方法转换为对应的第一整数。

4.根据权利要求1所述的存储方法,其特征在于,所述根据第一浮点数存储精度表征值对应关系获取与所述浮点数存储精度对应的第一精度表征整数包括:当所述浮点数存储精度为2时,所述浮点数存储精度对应的第一精度表征整数为0;

当所述浮点数存储精度为‑1时,所述浮点数存储精度对应的第一精度表征整数为14;

当所述浮点数存储精度为‑2时,所述浮点数存储精度对应的第一精度表征整数为15;

当所述浮点数存储精度为空值时,所述浮点数存储精度对应的第一精度表征整数为7。

5.根据权利要求4所述的存储方法,其特征在于,所述存储方法还包括:当所述第一精度表征整数为7时,根据第二浮点数存储精度表征值对应关系获取与所述空值对应的第二精度表征整数并将所述第二精度表征整数保存到第二精度单元组。

6.一种浮点数数据的读取方法,其特征在于,所述读取方法包括:获取第二数据,所述第二数据用于表征浮点数数据;

通过连续位标识技术的逆运算获取与所述第二数据对应的具有固定长度的第一数据;

读取所述第一数据的第一整数存储单元以获得第一整数的绝对值;

读取所述第一数据的符号单元组以获得第一整数的符号位;

读取所述第一数据的第一精度单元组以获得第一精度表征整数并根据第一浮点数存储精度表征值对应关系获取与所述第一精度表征整数对应的浮点数存储精度;

根据第一整数的绝对值和第一整数的符号位获得对应的第一整数;

根据所述浮点数存储精度和第一整数获得对应的浮点数数据。

7.根据权利要求6所述的读取方法,其特征在于,所述第一数据具有64个比特位。

8.根据权利要求6所述的读取方法,其特征在于,所述根据第一浮点数存储精度表征值对应关系获取与所述第一精度表征整数对应的浮点数存储精度包括:当所述第一精度表征整数0时,所述第一精度表征整数对应的浮点数存储精度为2;

当所述第一精度表征整数14时,所述第一精度表征整数对应的浮点数存储精度为‑1;

当所述第一精度表征整数15时,所述第一精度表征整数对应的浮点数存储精度为‑2;

当所述第一精度表征整数7时,所述第一精度表征整数对应的浮点数存储精度为空值。

9.一种计算机可读存储介质,其上存储计算机程序指令,其特征在于,所述计算机程序指令在被处理器执行时实现如权利要求1‑8中任一项所述的方法。

10.一种电子设备,包括存储器和处理器,其特征在于,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如权利要求1‑8中任一项所述的方法。

说明书 :

浮点数数据的存储、读取方法和计算机可读存储介质

技术领域

[0001] 本申请涉及计算机数据编码的技术领域,具体涉及一种浮点数数据的存储、读取方法和计算机可读存储介质。

背景技术

[0002] 在金融、工程、科学等领域,每天有大量的数据需要存储、计算和传输,其中浮点数数据占了很大的比例。例如,股票的实时价格和历史K线数据,基金的净值、收益率和历史净值,这些数据通常以浮点数的形式广泛存在,且每个数据是8个字节。这些浮点数数据占据了较大的计算机存储空间和传输成本,严重影响了计算机的运行效率,同时对计算机设备的性能有较大的影响。

发明内容

[0003] 有鉴于此,本发明实施例提供一种浮点数数据的存储、读取方法和计算机可读存储介质,通过将浮点数数据进行编码转换以及应用连续位标识技术进行变长字节存储,从而压缩了浮点数数据的存储空间并降低了数据传输时间。
[0004] 第一方面,本发明实施例提供了一种浮点数数据的存储方法,所述存储方法包括:
[0005] 根据预定的浮点数存储精度将浮点数数据转换为对应的第一整数;
[0006] 根据第一浮点数存储精度表征值对应关系获取与所述浮点数存储精度对应的第一精度表征整数并将所述第一精度表征整数保存到第一精度单元组;
[0007] 获取所述第一整数的符号位,并将所述符号位保存到符号单元组;
[0008] 将所述第一整数的绝对值保存到第一整数存储单元内;
[0009] 根据所述第一精度单元组、符号单元组和第一整数存储单元确定具有固定长度的第一数据;
[0010] 通过连续位标识技术对所述第一数据进行变长编码以获得具有不固定长度的第二数据进行存储。
[0011] 可选地,所述第一数据具有64个比特位。
[0012] 可选地,所述浮点数数据通过四舍五入方法转换为对应的第一整数。
[0013] 可选地,所述根据第一浮点数存储精度表征值对应关系获取与所述浮点数存储精度对应的第一精度表征整数包括:
[0014] 当所述浮点数存储精度为2时,所述浮点数存储精度对应的第一精度表征整数为0;
[0015] 当所述浮点数存储精度为‑1时,所述浮点数存储精度对应的第一精度表征整数为14;
[0016] 当所述浮点数存储精度为‑2时,所述浮点数存储精度对应的第一精度表征整数为15;
[0017] 当所述浮点数存储精度为空值时,所述浮点数存储精度对应的第一精度表征整数为7。
[0018] 可选地,所述存储方法还包括:
[0019] 当所述第一精度表征整数为7时,根据第二浮点数存储精度表征值对应关系获取与所述空值对应的第二精度表征整数并将所述第二精度表征整数保存到第二精度单元组。
[0020] 第二方面,本发明实施例提供了一种浮点数数据的读取方法,所述读取方法包括:
[0021] 获取第二数据,所述第二数据用于表征浮点数数据;
[0022] 通过连续位标识技术的逆运算获取与所述第二数据对应的具有固定长度的第一数据;
[0023] 读取所述第一数据的第一整数存储单元以获得第一整数的绝对值;
[0024] 读取所述第一数据的符号单元组以获得第一整数的符号位;
[0025] 读取所述第一数据的第一精度单元组以获得第一精度表征整数并根据第一浮点数存储精度表征值对应关系获取与所述第一精度表征整数对应的浮点数存储精度;
[0026] 根据第一整数的绝对值和第一整数的符号位获得对应的第一整数;
[0027] 根据所述浮点数存储精度和第一整数获得对应的浮点数数据。
[0028] 可选地,所述第一数据具有64个比特位。
[0029] 可选地,所述根据第一浮点数存储精度表征值对应关系获取与所述第一精度表征整数对应的浮点数存储精度包括:
[0030] 当所述第一精度表征整数0时,所述第一精度表征整数对应的浮点数存储精度为2;
[0031] 当所述第一精度表征整数14时,所述第一精度表征整数对应的浮点数存储精度为‑1;
[0032] 当所述第一精度表征整数15时,所述第一精度表征整数对应的浮点数存储精度为‑2;
[0033] 当所述第一精度表征整数7时,所述第一精度表征整数对应的浮点数存储精度为空值。
[0034] 第三方面,本发明实施例提供了一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现如第一方面和第二方面中任一项所述的方法。
[0035] 第四方面,本发明实施例提供了一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如第一方面和第二方面中任一项所述的方法。
[0036] 通过将浮点数数据以具有第一整数和浮点数存储精度的指数形式表示,并对其进行编码转换后应用连续位标识技术进行变长编码以获取具有不固定长度的第二数据进行存储,从而压缩了浮点数数据的存储空间并降低了数据传输时间。

附图说明

[0037] 通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
[0038] 图1为本发明第一实施例的浮点数数据的存储方法的流程图;
[0039] 图2为本发明第二实施例的浮点数数据的读取方法的流程图;
[0040] 图3为本发明第三实施例的浮点数数据存储装置的结构图;
[0041] 图4为本发明第四实施例的浮点数数据读取装置的结构图;
[0042] 图5是本发明第五实施例的电子设备的示意图。

具体实施方式

[0043] 以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。
[0044] 此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
[0045] 除非上下文明确要求,否则在说明书的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
[0046] 在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
[0047] 图1为本发明第一实施例的浮点数数据的存储方法的流程图,如图1所示,所述存储方法包括:
[0048] 步骤S110、根据预定的浮点数存储精度将浮点数数据转换为对应的第一整数。
[0049] 在计算机存储技术领域,一般浮点数数据在进行存储时需要将其转换为具有浮点数存储精度的形式进行表示。在本发明实施例中,任意的浮点数f使用第一公式与整数对(n,p)建立对应的关系:
[0050] f=n×10‑p   (1);
[0051] 其中,f为浮点数;n为第一整数,其中所述第一整数n的符号与浮点数f的符号相同,同正同负或者同为零;p为浮点数存储精度,也即浮点数的小数位个数,一般是非负整数。
[0052] 其中,第一整数n的根据第二公式计算获得,也即浮点数通过四舍五入计算获得第一整数n,所述第二公式为:
[0053] n=round(f×10p)   (2);
[0054] 其中,round()表示四舍五入的取整函数,f为浮点数;n为第一整数,p为浮点数存储精度。
[0055] 例如,用圆周率π作为例子来说明浮点数通过第一公式和第二公式与整数对(n,p)建立对应的关系:
[0056] 当浮点数存储精度为2时,圆周率π对应的整数对(n,p)为:
[0057] 3.14=314×10‑2;
[0058] 当浮点数存储精度为4时,圆周率π对应的整数对(n,p)为:
[0059] 3.1416=31416×10‑4;
[0060] 当浮点数根据上面的第一公式与整数对(n,p)建立对应关系后,将整数对(n,p)转换为一个计算机整数进行表示,就完成了浮点数到整数的编码过程。
[0061] 步骤S120、根据第一浮点数存储精度表征值对应关系获取与所述浮点数存储精度对应的第一精度表征整数并将所述第一精度表征整数保存到第一精度单元组。
[0062] 在步骤S110中将浮点数转换为相对应的整数对(n,p)后,需要对其进行转换存储。具体地转换方法如下:
[0063] 在本发明实施例中,首先将8字节/64位的计算机存储容量按照4比特一组进行分组,形成16个分组;然后按照比特位由低到高的顺序依次进行编号排序,如下表1所示:
[0064] 表1 8字节的存储容量的分组表
[0065] 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00007H 7L 6H 6L 5H 5L 4H 4L 3H 3L 2H 2L 1H 1L 0H 0L
[0066] 其中,7H和7L构成一个字节,6H和6L构成一个字节,依次类推共有8个字节。上述每个分组中均包括4个比特,按照比特位由低到高的顺序依次进行编号排序:0、1、2、3。例如,7H和7L构成的字节按比特位由高到低表示如下(其它字节以此类推):
[0067] 表2 7H和7L的比特位编码表
[0068]
[0069]
[0070] 在本发明实施例中,为了使得浮点数数据可以以较小的整数进行变长编码后存储,本发明实施例中的浮点数存储精度需要通过第一浮点数存储精度表征值对应关系获取与所述浮点数存储精度对应的第一精度表征整数,然后将所述第一精度表征整数保存到第一精度单元组。在发明实施例中,所述浮点数存储精度与精度表征整数的对应关系如下表3所示:
[0071] 表3第一浮点数存储精度表征值对应关系表
[0072] p 2 0 1 3 4 5 6   7 8 9 10 11 12 ‑1 ‑2q 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[0073] 其中,p为浮点数存储精度,q为第一精度表征整数。
[0074] 根据浮点数存储精度p查表3得到第一精度表征整数q,并将第一精度表征整数q保存到表1中编号为2L所在的分组位置,也即第一精度单元组。通过表3可以得出:
[0075] (1)当浮点数存储精度p为2时,第一精度表征整数q为0。在本发明实施例中,浮点数在进行计算机存储时,选择浮点数存储精度为2的浮点数数据占比很大,因此,当浮点数存储精度为2时,将其对应的第一精度表征整数设置为0,在后续存储时,可以大大降低浮点数数据的存储空间。
[0076] (2)当浮点数存储精度p保留,第一精度表征整数q为7。此处是为特殊值设计的,分别包括5种情形:空值,正无穷,负无穷,正指数,负指数。上述5种情形分别定义数值0到4,保存到2H所在的分组位置,也即第二精度单元组。第二浮点数存储精度表征值对应关系如下表4所示:
[0077] 表4第二浮点数存储精度表征值对应关系表
[0078] 情形 空值 正无穷 负无穷 正指数 负指数数值(2H) 0 1 2 3 4
[0079] 在实际应用中,数据一般只有空值需要表示,对正无穷、负无穷、正指数、负指数不作进一步的说明,也即第二精度单元组2H内均为0。一般情况下,浮点数存储精度不会为空值,因此2H单元组内为空,为后续步骤S140中第一整数的绝对值保留了存储空间。
[0080] 在其它可选实现方式中,第一精度表征整数q也可以保存到表1中的其它分组的位置,也即也可定义其它分组为第一精度单元组。
[0081] 步骤S130、获取所述第一整数的符号位,并将所述符号位保存到符号单元组。
[0082] 当根据步骤S110获得第一整数后,可以根据第一整数获知其正负性能,即正数或负数。然后根据第三公式获取所述第一整数的符号位,也即第一整数的正负性能通过数值表达。第三公式如下:
[0083]
[0084] 其中,n为第一整数,S(n)为第一整数的符号位。
[0085] 当获取到第一整数的符号位时,将所述符号位保存到1H.2所在的比特位置,也即1H单元组的第三个比特位上。同时,本发明实施例还保留了1H.3所在的比特位置,其可以用于扩大浮点数存储精度p的范围,从而支持更大的精度范围。
[0086] 在其它可选实现方式中,第一整数的符号位还可以保存到其它低于1H.2的比特位上,以使得第一整数的符号位与第一精度单元组之间的比特位可以扩大浮点数存储精度p的范围,从而支持更大的精度范围。同时,在其它可选实现方式中,第一整数的符号位还可以保存到其它高于1H.2的比特位上。
[0087] 步骤S140、将所述第一整数的绝对值保存到第一整数存储单元内。
[0088] 在步骤S120和步骤S130中,第一整数的符号位和浮点数存储精度共占用了单元组2L和单元组1H.3、1H.2的两个比特位,也即共占用6个比特位,而计算机整数共有64个比特位。将剩余的58个比特位按顺序看作一个整体即第一整数存储单元,用来保存第一整数n的绝对值|n|。
[0089] 如下表5所示:
[0090] 表5 8字节的存储容量的分组表
[0091] 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00007H 7L 6H 6L 5H 5L 4H 4L 3H 3L 2H 2L 1H 1L 0H 0L
[0092] 在表5中,单元组2L和单元组1H.3、1H.2的两个比特位分别为第一整数的符号位和浮点数存储精度占用的比特位,其余58个比特位用于保存第一整数n的绝对值|n|。从上述58
表5可以看出可以保存的最小值为零,而最大值为2 ‑1=288230376151711743,其值是28.8亿亿,最多18个有效数字,精度为2时,其浮点数的值是2880万亿,实际的数据一般不会超过这个值,如果超出则需要重新定义步骤S110中的第一公式。
[0093] 在本发明实施例中步骤S120、S130、S140可以是先后依次进行的步骤,也可以是同时进行等,三者之间没有固定的先后顺序。
[0094] 步骤S150、根据所述第一精度单元组、符号单元组和第一整数存储单元确定具有固定长度的第一数据。
[0095] 将步骤S120、S130、S140中的第一精度单元组、符号单元组和第一整数存储单元保存的数值可以确定具有固定长度的第一数据,也即具有64位的第一数据。也就是说,将浮点数数据保存为具有64位长度的二进制编码。在其它可选实现方式中,所述第一数据的长度可以为具有任意字节长度的数据,具体长度可以根据实际存储时的需求进行定义。在本实施例中,所举例的第一数据均为具有8字节/64位的存储空间。
[0096] 步骤S160、通过连续位标识技术对所述第一数据进行变长编码以获得具有不固定长度的第二数据进行存储。
[0097] 将具有固定长度的第一数据通过连续位标识技术(Google Protocol Buffers,protobuf)进行变长编码从而获得具有不固定长度的第二数据进行存储。protobuf是Google提供的一个具有高效的协议数据交换格式工具库,其具有较高的转化效率(时间效率和空间效率),通过使用每个字节的最高的第一位来标识是否需要继续向后读,每个字节的低7位用于实际的编码。
[0098] 通过如下例子说明具有固定长度的二进制数据根据连续位标识技术进行变长编码之后进行存储。例如:十进制数:12459。二进制(8个字节):00000000 00000000 00000000 00000000 00000000 00000000 00110000 10101011,总共64位,8个字节,其存储时需要占用8个字节的存储空间。将上述二进制数据通过protobuf进行编码存储,具体过程如下:
[0099] (1)从二进制数据的低字节(右边)开始每7位进行一次分割,分割后的二进制数据为:1100001 0101011;
[0100] (2)将上述分割后的数据按照分组进行倒序:0101011 1100001;
[0101] (3)给倒序后的数据增加标识符位:10101011 01100001;其中,1表示继续往后读取,0表示停止读取。
[0102] 所以最终存储的编码结果为:10101011 01100001,总共16位,2个字节。这样将8字节的存储大小转化为2字节存储大小,大大压缩了数据的存储空间,同时也降低了数据的传输时间。
[0103] 通过上述结果可知,如果二进制的高位(左边)字节为0,通过protobuf编码后,可以大大减少数据所占用的存储空间。
[0104] 同时,本发明实施例通过如下例子说明浮点数的存储过程。
[0105] 例如,浮点数:3.14。当浮点数存储精度为2时,浮点数3.14可以表示为3.14=314‑2×10 。将浮点数进行二进制编码,具体地,根据表3可知,浮点数存储精度2的编码为0,将其保存在2L所在的分组。且314为正数,根据第三公式可知,314的符号位为0,存储在1H.2所在的比特位置。314用二进制表示存储于其它58个比特位上。也就是说,浮点数3.14保存为:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 10111010。
[0106] 然后,通过protobuf进行编码存储,具体过程如下:
[0107] (1)从二进制数据的低字节(右边)开始每7位进行一次分割,分割后的二进制数据为:0000001 0111010;
[0108] (2)将上述分割后的数据按照分组进行倒序:0111010 0000001;
[0109] (3)给倒序后的数据增加标识符位:10111010 00000001;其中,1表示继续往后读取,0表示停止读取。
[0110] 所以最终存储的编码结果为:10111010 00000001,总共16位,2个字节。这样将8字节的存储大小转化为2字节存储大小,大大压缩了数据的存储空间,同时也降低了数据的传输时间。
[0111] 通过上述结果可知,如果二进制的高位(左边)字节为0,通过protobuf编码后,可以大大减少数据所占用的存储空间。
[0112] 本发明实施例通过将浮点数以浮点数存储精度和第一整数的形式表示,然后将浮点数存储精度和第一整数分别进行保存形成固定长度的第一数据,然后通过连续位标识技术对第一数据进行变长编码以获得具有不固定长度的第二数据进行存储,从而实现了浮点数数据的压缩存储,降低了浮点数数据存储占用的空间和数据传输时间。
[0113] 本发明实施例还公开了一种浮点数数据的读取方法,在本发明实施例中读取方法与第一实施例中浮点数数据的存储方法为相互可逆的。具体地,图2为本发明第二实施例的浮点数数据的读取方法流程图,如图2所示,所述方法包括:
[0114] 步骤S210、获取第二数据。
[0115] 所述第二数据用于表征具有不同浮点数存储精度的浮点数数据,所述第二数据具有不固定的长度。也即,第二数据可以是1个字节、2个字节或者其他任意字节的数据。
[0116] 步骤S220、通过连续位标识技术的逆运算获取与所述第二数据对应的具有固定长度的第一数据。
[0117] 通过连续位标识技术的逆运算获取与所述第二数据对应的具有固定长度的第一数据。例如,获取的第二数据为10101011 01100001,总共16位,2个字节。
[0118] (1)然后将第二数据中每个字节的标识符位去除获得:0101011 1100001;
[0119] (2)将上述去除标识符位的数据按照分组进行倒序为:1100001 0101011;
[0120] (3)将步骤2中的数据补齐空位,所得二进制数为:00000000 00000000 00000000 00000000 00000000 00000000 00110000 10101011,总共64位,8个字节。其所表达的十进制数为:12459。
[0121] 步骤S230、读取所述第一数据的第一整数存储单元以获得第一整数的绝对值。
[0122] 第一数据的第一整数存储单元包括58个比特位,其中包括低14位比特位和高44比特位,也即步骤S220中64位二进制数从右到左第15位到第20位的比特位以外的其它比特位。通过读取第一整数存储单元获得第一整数的绝对值。在步骤S220中的第一整数的绝对值为12459。
[0123] 步骤S240、读取所述第一数据的符号单元组以获得第一整数的符号位。
[0124] 在本实施例中,第一数据的符号单元组是指第13个比特位,也即1H.2。读取第一数据的符号单元组获得第一整数的符号位,当第一整数的符号位为0时,第一整数为大于等于0的正整数,当第一整数的符号位为1时,第一整数为小于0的负整数。
[0125] 在其它可选实现方式中,第一整数的符号位还可以保存到其它低于1H.2的比特位上,以使得第一整数的符号位与第一精度单元组之间的比特位可以扩大浮点数存储精度p的范围,从而支持更大的精度范围。同时,在其它可选实现方式中,第一整数的符号位还可以保存到其它高于1H.2的比特位上。
[0126] 步骤S250、读取所述第一数据的第一精度单元组以获得第一精度表征整数并根据第一浮点数存储精度表征值对应关系获取与所述第一精度表征整数对应的浮点数存储精度。
[0127] 在本实施例中,第一数据的第一精度单元组是指第17到20的比特位,也即2L单元组。读取2L单元组的数值可以获得第一精度表征整数,然后通过第一浮点数存储精度表征值对应关系可以获得与第一精度表征整数对应的浮点数存储精度,也即通过表3可以获得与第一精度表征整数对应的浮点数存储精度。
[0128] 在其它可选实现方式中,所述第一数据的第一精度单元组可以是其它单元组。第一精度表征整数q也可以保存到表1中的其它分组的位置,也即也可定义其它分组为第一精度单元组。
[0129] 在本发明实施例中步骤S230、S240、S250可以是先后依次进行的步骤,也可以是同时进行等,三者之间没有固定的先后顺序。
[0130] 步骤S260、根据第一整数的绝对值和第一整数的符号位获得对应的第一整数。
[0131] 根据步骤S230和步骤S240获得的第一整数的绝对值和第一整数的符号位可以确定第一整数。在其它可选实现方式中,步骤S260可以在步骤S230和步骤S240完成后执行,也可以在步骤S230、S240、S250完成后执行。
[0132] 步骤S270、根据所述浮点数存储精度和第一整数获得对应的浮点数数据。
[0133] 根据步骤S260确定的第一整数以及步骤S250确定的浮点数存储精度可以确定浮点数数据。具体地,将第一整数以及浮点数存储精度带入第一公式内即可确定浮点数数据,其中,所述第一公式为:
[0134] f=n×10‑p
[0135] 其中,f为浮点数数据,n为第一整数,p为浮点数存储精度。
[0136] 在本实施例中,由于浮点数数据在存储时,第一整数是通过四舍五入计算获得的。因此,在读取浮点数数据时,所读取获得的浮点数数据具有一定的浮点数存储精度。
[0137] 例如,圆周率π在进行存储时,可以以不同的浮点数存储精度进行存储,由于浮点数存储精度不同,其存储时的数值不同。当读取具有不同浮点数存储精度的圆周率时,所获得的最终数值不同。具体如下:
[0138] (1)当圆周率存储为10111010 00000001,总共16位,2个字节:
[0139] 1)根据连续位标识技术的逆运算将10111010 00000001转换为具有64位长度的数据。64位编码为:00000000 00000000 00000000 00000000 00000000 00000000 00000000 10111010。
[0140] 2)读取2L所在分组的编码以获取浮点数存储精度,所述2L所在的分组中的编码为0000,对应的十进制数值为0,根据表3中第一浮点数存储精度表征值对应关系,可以得知所读取的圆周率的浮点数存储精度为2。
[0141] 3)读取1H.2比特位上的编码以获取第一整数的符号位也即正负性,所述第一整数的符号位为0,根据第三公式可以得知第一整数为正数。
[0142] 4)读取第一整数存储单元中的编码以获得第一整数的绝对值大小,所述第一整数存储单元为除了1H.2、1H.3、2L.0、2L.1、2L.2、2L.3的其它58个比特位。读取获得第一整数为314。
[0143] 5)将步骤2)、3)、4)中获得的浮点数存储精度和第一整数带入第一公式中,即可获‑2得圆周率为:3.14=314×10 。所获得的圆周率的精度为2。
[0144] (2)当圆周率存储为10111000 11110101 01010000,总共24位,3个字节。
[0145] 1)根据连续位标识技术的逆运算将10111000 11110101 01010000转换为具有64位长度的数据。64位编码为:00000000 00000000 00000000 00000000 00000000 00010100 00111010 10111000。
[0146] 2)读取2L所在分组的编码以获取浮点数存储精度,所述2L所在的分组中的编码为0100,对应的十进制数值为4,根据表3中第一浮点数存储精度表征值对应关系,可以得知所读取的圆周率的浮点数存储精度为4。
[0147] 3)读取1H.2比特位上的编码以获取第一整数的符号位也即正负性,所述第一整数的符号位为0,根据第三公式可以得知第一整数为正数。
[0148] 4)读取第一整数存储单元中的编码以获得第一整数的绝对值大小,所述第一整数存储单元为除了1H.2、1H.3、2L.0、2L.1、2L.2、2L.3的其它58个比特位。读取获得第一整数为31416。
[0149] 5)将步骤2)、3)、4)中获得的浮点数存储精度和第一整数带入第一公式中,即可获‑4得圆周率为:3.1416=31416×10 。所获得的圆周率的精度为4。
[0150] 本发明实施例通过连续位标识技术对读取的第二数据进行逆运算获取具有固定长度的第一数据,然后读取第一数据内的第一整数的绝对值、第一整数的符号位以及精度表征整数,并根据对应关系获取到第一整数和浮点数存储精度,从而获取到具有浮点数存储精度的浮点数数据,从而实现了浮点数数据的读取,降低了浮点数数据存储占用的空间和数据传输时间。
[0151] 图3是本发明第三实施例的浮点数数据存储装置的结构图。如图3所示,所述浮点数数据存储装置包括转换单元101、精度单元102、符号单元103、整数单元104、第一数据生成单元105和第二数据生成单元106。其中,转换单元101被配置为根据预定的浮点数存储精度将浮点数数据转换为对应的第一整数;精度单元102被配置为根据第一浮点数存储精度表征值对应关系获取与所述浮点数存储精度对应的第一精度表征整数并将所述第一精度表征整数保存到第一精度单元组;符号单元103被配置为获取所述第一整数的符号位,并将所述符号位保存到符号单元组;整数单元104被配置为将所述第一整数的绝对值保存到第一整数存储单元内;第一数据生成单元105被配置为根据所述第一精度单元组、符号单元组和第一整数存储单元确定具有固定长度的第一数据;第二数据生成单元106被配置为通过连续位标识技术对所述第一数据进行变长编码以获得具有不固定长度的第二数据进行存储。其中,所述第一数据可以为具有任意字节长度的数据,在本实施例中,所述第一数据具有8个字节/64个比特位。所述第一整数由浮点数数据通过四舍五入方法转换获得。
[0152] 图4为本发明第四实施例的浮点数数据读取装置的结构图。如图4所示,所述浮点数数据读取装置包括第一获取单元201、第二获取单元202、第一读取单元203、第二读取单元204、第三读取单元205、第一整数单元206和浮点数数据单元207。第一获取单元201被配置为获取第二数据,所述第二数据用于表征浮点数数据;第二获取单元202被配置为通过连续位标识技术的逆运算获取与所述第二数据对应的具有固定长度的第一数据;第一读取单元203被配置为读取所述第一数据的第一整数存储单元以获得第一整数的绝对值;第二读取单元204被配置为读取所述第一数据的符号单元组以获得第一整数的符号位;第三读取单元205被配置为读取所述第一数据的第一精度单元组以获得第一精度表征整数并根据第一浮点数存储精度表征值对应关系获取与所述第一精度表征整数对应的浮点数存储精度;第一整数单元206被配置为根据第一整数的绝对值和第一整数的符号位获得对应的第一整数;浮点数数据单元207被配置为根据所述浮点数存储精度和第一整数获得对应的浮点数数据。
[0153] 图5是本发明第五实施例的电子设备的示意图。图5所示的电子设备为通用数据处理装置,其包括通用的计算机硬件结构,其至少包括处理器51和存储器52。处理器51和存储器52通过总线53连接。存储器52适于存储处理器51可执行的指令或程序。处理器51可以是独立的微处理器,也可以是一个或者多个微处理器集合。由此,处理器51通过执行存储器52所存储的指令,从而执行如上所述的本发明实施例的方法流程实现对于数据的处理和对于其它装置的控制。总线53将上述多个组件连接在一起,同时将上述组件连接到显示控制器54和显示装置以及输入/输出(I/O)装置55。输入/输出(I/O)装置55可以是鼠标、键盘、调制解调器、网络接口、触控输入装置、体感输入装置、打印机以及本领域公知的其他装置。典型地,输入/输出装置55通过输入/输出(I/O)控制器56与系统相连。优选地,本实施例的电子设备为服务器。
[0154] 同时,如本领域技术人员将意识到的,本发明实施例的各个方面可以被实现为系统、方法或计算机程序产品。因此,本发明实施例的各个方面可以采取如下形式:完全硬件实施方式、完全软件实施方式(包括固件、常驻软件、微代码等)或者在本文中通常可以都称为“电路”、“模块”或“系统”的将软件方面与硬件方面相结合的实施方式。此外,本发明的方面可以采取如下形式:在一个或多个计算机可读介质中实现的计算机程序产品,计算机可读介质具有在其上实现的计算机可读程序代码。
[0155] 可以利用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是如(但不限于)电子的、磁的、光学的、电磁的、红外的或半导体系统、设备或装置,或者前述的任意适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)将包括以下各项:具有一根或多根电线的电气连接、便携式计算机软盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪速存储器)、光纤、便携式光盘只读存储器(CD‑ROM)、光存储装置、磁存储装置或前述的任意适当的组合。在本发明实施例的上下文中,计算机可读存储介质可以为能够包含或存储由指令执行系统、设备或装置使用的程序或结合指令执行系统、设备或装置使用的程序的任意有形介质。
[0156] 计算机可读信号介质可以包括传播的数据信号,所述传播的数据信号具有在其中如在基带中或作为载波的一部分实现的计算机可读程序代码。这样的传播的信号可以采用多种形式中的任何形式,包括但不限于:电磁的、光学的或其任何适当的组合。计算机可读信号介质可以是以下任意计算机可读介质:不是计算机可读存储介质,并且可以对由指令执行系统、设备或装置使用的或结合指令执行系统、设备或装置使用的程序进行通信、传播或传输。
[0157] 可以使用包括但不限于无线、有线、光纤电缆、RF等或前述的任意适当组合的任意合适的介质来传送实现在计算机可读介质上的程序代码。
[0158] 用于执行针对本发明各方面的操作的计算机程序代码可以以一种或多种编程语言的任意组合来编写,所述编程语言包括:面向对象的编程语言如Java、Smalltalk、C++等;以及常规过程编程语言如“C”编程语言或类似的编程语言。程序代码可以作为独立软件包完全地在用户计算机上、部分地在用户计算机上执行;部分地在用户计算机上且部分地在远程计算机上执行;或者完全地在远程计算机或服务器上执行。在后一种情况下,可以将远程计算机通过包括局域网(LAN)或广域网(WAN)的任意类型的网络链接至用户计算机,或者可以与外部计算机进行连接(例如通过使用因特网服务供应商的因特网)。
[0159] 上述根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图图例和/或框图描述了本发明的各个方面。将要理解的是,流程图图例和/或框图的每个块以及流程图图例和/或框图中的块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供至通用计算机、专用计算机或其它可编程数据处理设备的处理器,以产生机器,使得(经由计算机或其它可编程数据处理设备的处理器执行的)指令创建用于实现流程图和/或框图块或块中指定的功能/动作的装置。
[0160] 还可以将这些计算机程序指令存储在可以指导计算机、其它可编程数据处理设备或其它装置以特定方式运行的计算机可读介质中,使得在计算机可读介质中存储的指令产生包括实现在流程图和/或框图块或块中指定的功能/动作的指令的制品。
[0161] 计算机程序指令还可以被加载至计算机、其它可编程数据处理设备或其它装置上,以使在计算机、其它可编程设备或其它装置上执行一系列可操作步骤来产生计算机实现的过程,使得在计算机或其它可编程设备上执行的指令提供用于实现在流程图和/或框图块或块中指定的功能/动作的过程。
[0162] 本发明实施例公开了一种浮点数数据的存储、读取方法和计算机可读存储介质,根据预定的浮点数存储精度以及浮点数存储精度表征值对应关系获得浮点数数据的第一整数、精度表征整数,并将第一整数的绝对值、第一整数的符号位以及精度表征整数分别进行保存以确定具有固定长度的第一数据,然后通过连续位标识技术对第一数据进行变长编码以获得具有不固定长度的第二数据进行存储,从而实现了浮点数数据的压缩存储,降低了浮点数数据存储占用的空间和数据传输时间。
[0163] 以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。