当前位置: 首页 > 后端技术 > Node.js

Node.js中小数计算溢出问题及解决方法

时间:2023-04-03 15:43:18 Node.js

翻译平台有相似度检测功能,有计算两个字符串相似度的功能。原来两个相同的字符串返回的相似度出乎意料,因为根据余弦相似度算法[1],小于用户通过的最小相似度阈值1,所以属于低相似度的文本。为什么会这样:因为计算机执行的是二进制,而js中的数字都是用浮点数来表示的,并且规定IEEE754标准的双精度浮点数。IEEE754指定了两种基本的浮点格式:单精度和双精度。单精度格式:精度为24位有效位(包括符号),共占用32位。double格式:精度为53位有效位(包括符号),共占用64位。Deepenagain:Weuse0.1+0.2tocalculate0.1tobinary=>0.000110011001100110011001100110011001100110011100...0.2Converttobinary=>0.00110011001100110011001100111001110011100110011...Addition=>0.01001100110011001100110011001100110011001100110011001100根据IEEE754标准预留52位,根据加权加法取0取整得到值=>00000≈0.30解决方案:简单和固定优点:tofixed粗鲁缺点:没有四舍五入如下图:小数->整数->小数(即小数先左移再右移)可以使用第三方库Math.jsforJavaScript和Node.js扩展数学库。它有一个灵活的表达式解析器,支持符号求值,大量内置函数和常量,并提供处理不同数据类型的集成解决方案,如数字、大数、复数、分数、单位和矩阵。功能强大且易于使用。decimal.jsJavaScript的任意精度十进制类型。big.js一个小型、快速、易于使用的库,用于任意精度的十进制算法。周下载的话,想都没想就选big.js,用法也很简单。参考资料:https://www.cnblogs.com/airne...2.https://www.withyou.ink/bigna...