CDN网关超大range计算方法

天翼云开发者社区
• 阅读 278

本文分享自天翼云开发者社区《CDN网关超大range计算方法》 作者:康****彬

一、目前CDN网关openresty中的lua遇到两个超大数值,计算两个数值的差、和是不支持的,因为lua支持最大的数值的位数大小是19位,当数值大于 19位的时候,会自动变成指数类型,例如:1.22222e+19,并且两个同位超大数值比较大小也是不支持的,如下(20位数): local a = 11111111111111111111 local b = 11111111111111111222 print(a) = 1.1111111111111e+19 print(b) = 1.1111111111111e+19 print(a < b) = false (正常结果应为true) print(a == b) = true(正常结果应为false) 因此,结果是无法比较的,也是无法计算,相减等于0。 二、可通过以下方式处理: 1、数值转换-数字转为字符串:针对两个超大数值,数字先转成字符串,A:大的字符串,B:小的字符串; 2、补位:对B的数值字符串进行补位,前面默认补0,使得两个字符串长度一致; 3、分割字符串:针对A、B两个字符串,按照每10位从头进行分割(最后一段可能小于10位),记A1、A2……An,B1、B2……Bn,此时A1的长度=B1的长度,以此类推,保证两个字符串的每一段数据的长度是一致的,方便后续计算; 4、字符串转为数字:An和Bn转为数字; 5、借位: A1必然大于B1,比较A2与B2,如果A2<B2,则A2向A1借一位,A1=A1-1,A2=A2+10^10,依此类推,最后比较An,Bn,如果An<Bn,则(An-1)=(An-1)-1,An=An+10^(具体位数); 6、递归计算:分段计算得出结果,R1=A1-B1,R2=A2-B2……Rn=An-Bn,得到结果之后,把R1到R2转成字符串,最后R1到Rn拼接起来得到最终计算结果。 结果:lua超大数的表示以及计算方法,其中方法包含:数值转换、补位、分段切割、借位、递归计算,从而得到最终结果

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java中Comparatable接口和Comparator接口的区别
1、不同类型的排序规则.自然排序是什么?  自然排序是一种升序排序。对于不同的数据类型,升序规则不一样:  BigDecimalBigIntegerByteDoubleFloatIntegerLongShort类型,是按照数值的大小进行排序的。例如:12<23,111.1113.23  Charac
Wesley13 Wesley13
3年前
oracle数值类型
Oracle固有数据类型DATE、TIMESTAMP和INTERVAL是紧密相关的。DATE和TIMESTAMP类型存储精度可变的固定日期/时间。INTERVAL类型可以很容易地存储一个时间量,如“8个小时”或“30天”。许多新应用都在使用TIMESTAMP类型,这有两个原因:一方面它支持小数秒,而DATE类型不支持;另一方面TIMESTAMP
Wesley13 Wesley13
3年前
Mysql 数据类型、约束类型
mysql数据类型MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUME
Wesley13 Wesley13
3年前
12、ES6形参默认值
当定义函数的时候,可以给参数设置默认值。调用的时候不传递参数值,就使用默认值。例子1:普通函数,不传递参数值。默认全是undefined。functionadd(a,b,c){console.log(a,b,c);}add();//不传递参数是,默认参数值全是undef
Wesley13 Wesley13
3年前
MySQL中的数值函数
常用数值函数函  数功  能ABS(x)返回数值x的绝对值CEIL(x)返回大于或等于x的最小整数值FLOOR(x)返回小于或等于x的最大整数值MOD(x,y)返回x除以y的余数RAND()返回0~1内的随机数ROUND(x,y)返回x四舍五入后有y位小数的数值TRUNCATE(
Stella981 Stella981
3年前
JavaScript里面三个等号和两个等号的区别
\equality等同,identity恒等。\,两边值类型不同的时候,要先进行类型转换,再比较。\,不做类型转换,类型不同的一定不等。下面分别说明:先说,这个比较简单。下面的规则用来判断两个值是否相等:1、如果类型不同,就\不相等\2、如果两个都是数值,并且是同
Wesley13 Wesley13
3年前
MySQL数据库DDL、DML详解
一、MySQL数据库数据类型<1MySQL数据库中支持多种数据类型数值型字符型日期型<2常用的数据类型整型int:整型,存储整数int(M):M表示预期值,与存储大小和数值的范围无关idi
Wesley13 Wesley13
3年前
Mongo字符串类型的数值查询
​    在Mongo中都知道字符串类型大小比较都是以ASCII进行比较的,所以无法真实比较字符串类型的数值大小!(https://oscimg.oschina.net/oscnet/e467c5ffae2e46f6168a36e682d01fc358d.png)​     比如查询age大于3的:db.getColle
Wesley13 Wesley13
3年前
2.python内置数据结构
第一类:数值类型一.数值型包括1.int(整型):python3里数字不管多大永远都是int长整型,且没有大小限制,受限于内存区域的大小类型转换:int(x)返回一个整数2.float(浮点型):有整数部分和小数部分组成。支持十进制和科学计数法表示。只有双精度型类型转换:float(x)返回一个浮点数3.c
Stella981 Stella981
3年前
Python数据分析之基础篇(一)
数据类型计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:整数Python可以处理任意大小的整数,当然包括负整数
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
675
粉丝
15
获赞
40