CDN閘道器超大range計算方法
本文分享自天翼雲開發者社群《 CDN閘道器超大range計算方法 》,作者: 康****彬https://www.ctyun.cn/developer/article/418155452207173
一、目前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超大數的表示以及計算方法,其中方法包含:數值轉換、補位、分段切割、借位、遞迴計算,從而得到最終結果
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014251/viewspace-2953023/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用邊緣計算閘道器分析CAN報文
- api閘道器設計API
- 開放API閘道器實踐(一) ——設計一個API閘道器API
- Janusec應用安全閘道器(WAF閘道器)
- Ceph物件閘道器,多區域閘道器物件
- 閘道器never_host設計
- 高效能API閘道器(1)、微服務API閘道器架構設計API微服務架構
- 超大整數的加減乘除計算方法
- 什麼是閘道器?閘道器的作用是什麼,閘道器的作用詳解
- 閘道器GatewayGateway
- gateway 閘道器Gateway
- 億級流量架構之閘道器設計思路、常見閘道器對比架構
- 邊緣計算閘道器在智慧儲能中的能效管理
- 從製造到智造,邊緣計算閘道器做了什麼?
- 《springcloud 二》微服務動態閘道器,閘道器叢集SpringGCCloud微服務
- API閘道器,企業級閘道器可擴充套件API套件
- API 閘道器 KongAPI
- Zuul路由閘道器Zuul路由
- kong閘道器部署
- Ocelot閘道器(二)
- Ocelot閘道器(三)
- 微服務閘道器微服務
- Linux系統預設閘道器怎麼更改?Linux系統預設閘道器的更改方法教程Linux
- AF_XDP在B站CDN節點QUIC閘道器的應用和落地UI
- 問下 API 閘道器進行測試的方法API
- 微服務閘道器- Nginx微服務Nginx
- Spring Cloud Zuul 閘道器SpringCloudZuul
- Gateway(閘道器)的概述Gateway
- SpringCloud(四)GateWay閘道器SpringGCCloudGateway
- SpringCloud(五)GateWay閘道器SpringGCCloudGateway
- springboot-zuul閘道器Spring BootZuul
- PLC透過Modbus轉Profinet閘道器連線壓力計的配置方法
- 微服務設計中的API閘道器模式微服務API模式
- 如何設計一個高效能閘道器
- 邊緣計算閘道器如何助力工業機器人執行監控和智慧管理機器人
- 服務閘道器過濾器過濾器
- 工業物聯網核心裝置(邊緣計算閘道器)有什麼功能
- 研發一款國產ARM智慧邊緣計算閘道器需要什麼