[发明专利]浮点数计算精度处理方法、系统、介质及设备有效
申请号: | 202110707266.X | 申请日: | 2021-06-24 |
公开(公告)号: | CN113326048B | 公开(公告)日: | 2023-01-17 |
发明(设计)人: | 邓力;宋金泽 | 申请(专利权)人: | 上海万向区块链股份公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F8/71;G06F9/30 |
代理公司: | 上海段和段律师事务所 31334 | 代理人: | 李佳俊;郭国中 |
地址: | 200086 上海*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 浮点 计算 精度 处理 方法 系统 介质 设备 | ||
1.一种浮点数计算精度处理方法,其特征在于,包括:
步骤1:启动babel编译器对JS代码进行编译处理,将JS代码转换为抽象语法树形态;
步骤2:对抽象语法树进行遍历,定位每个四则运算的代码节点,获取四则运算语句的左、右节点内容,根据运算符类型及左右节点的属性值创建补丁代码的抽象语法树,将新创建的抽象语法树替换掉当前定位到的四则运算代码节点的抽象语法树;
步骤3:根据修改替换后的抽象语法树生成新JS代码,进行无需精度计算的四则运算;
在替换抽象语法树前后,通过webpack对JS代码进行打包处理,并对抽象语法树进行备份;
使用访问者模式对抽象语法树进行遍历,对所有的签名和二进制表达式节点进行访问,得到四则运算符类型;
所述运算符类型包括:+运算符、+=运算符、-运算符、-=运算符、*运算符和/运算符;
针对+运算符、+=运算符,生成引入工具函数包中加法函数accAdd;
针对-运算符、-=运算符,生成引入工具函数包中减法函数accSub;
针对*运算符,生成引入工具函数包中乘法函数accMul;
针对/运算符,生成引入工具函数包中除法函数accDiv;
将运算符左右节点的属性值作为函数参数调用的抽象语法树模板;
基于webpack的前端项目构建流程中处理JavaScript浮点数计算精度问题的流程为:在webpack配置文件中,配置JS代码使用babel-loader进行处理,在babel配置文件中,加入精度处理插件;配置文件就绪后,启动webpack打包命令对代码进行打包;webpack读取到JS代码,将JS代码交由babel-loader;babel-loader调用babel及精度处理插件,对抽象语法树AST进行修改;babel将处理完成的代码通过babel-loader传递给webpack进行打包;
对精度问题进行自动化处理的流程为:babel通过babel/parser模块将JavaScript代码分析得到AST后调用本发明装置对AST进行遍历,对所有的AssignmentExpression、BinaryExpression节点进行访问;通过分析对应的AssignmentExpression、BinaryExpression中存在的运算符类型,创建不同的AST模块,对于+、+=运算符,将会创建调用加法函数的AST模版;对于-、-=运算符,将创建调用减法函数的AST模版;对于*运算符,将创建调用乘法函数的AST模版;对于/运算符,将创建调用除法函数的AST模版;根据新创建的AST模版替换掉原代码中四则运算相关的AST节点,实现对原代码的转换;最后babel通过babel/generate模块将新的AST生成转换后的新代码,最终转换好的新代码中便会包含用于处理计算精度的补丁代码。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海万向区块链股份公司,未经上海万向区块链股份公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110707266.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:水面垃圾收集器行进机构
- 下一篇:熔断配置修改方法、装置、设备及可读存储介质