OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

JavaScript中数学运算的安全范围及开源大整数高精度计算库


分享到
分类 JS开源   关键字 JavaScript   发布 kris  1418699660017
注意 转载须保留原文链接,译文链接,作者译者等信息。  
JavaScript中整数的最大"安全"数值为在-(2^53 - 1) 和 (2^53 - 1) 之间,即:

Number.MAX_SAFE_INTEGER : 9007199254740991
Number.MIN_SAFE_INTEGER : 9007199254740991

超过这个范围的数学计算在有可能是是不准确的,比如在目前最新版的Chrome中:

> 9007199254740991 * 256
2305843009213693700   //1 * 6 = 6, 最后一位应该是6?

实现结果应该是: 2305843009213693696 即损失了一定的精度。

JavaScript中的Number对象有一个 Number.isSafeInteger 可以判断此数值是否在安全范围:


> Number.isSafeInteger(2305843009213693700)
false


Crunch是用JavaScript写的一个任意精度的整数运算库。


它被设计用来快速地执行算术运算,特别是那些基于非对称加密密码系统诸如RSA构建。

使用


Crunch 可以用被网站引用

<script src="crunch.js"></script>
<script>
var crunch = Crunch();
</script>

或者在web worker中引用

var crunch = new Worker("crunch.js");

或者在node模块中使用

npm install number-crunch
var crunch = require("number-crunch");

范例 1

x = [10, 123, 21, 127];
y = [4, 211, 176, 200];
crunch.add(x, y); //[15, 78, 198, 71]

这个库使用8位(最大256)整型数组来表示“大整数”。但是在其内部它会被自动转换为28位整型数组。

Crunch 同样可以转化和解析成10进制的字符串,(string上面的默认方法是无法表达大整数的) 使用.stringify() 和 .parse() 方法.

范例 2

crunch.stringify([1,2,3,4,5,6,7,8,9,0]); // "4759477275222530853120"

crunch.parse("4759477275222530853120");  // [1,2,3,4,5,6,7,8,9,0]


支持的方法


Function    Input Parameters    Output
add         x, y    x + y
sub         x, y    x - y
mul         x, y    x * y
div         x, y    x / y
sqr         x   x * x
mod         x, y    x % y
bmr         x, y, [mu]  x % y
exp         x, e, n x^e % n
gar         x, p, q, d, u, [dp1], [dq1] x^d % pq
inv         x, y    1/x % y
xor         x, y    x XOR y
cut         x   Remove leading zeroes of x
zero        x   Return zero array of length x
compare     x, y    -1: x < y, 0: x = y, 1: x > y
decrement   x   x - 1
factorial   n   n! [n < 268435456]
nextPrime   x   First prime after x
testPrime   x   Boolean x is prime
stringify   x   String (base 10 representation)
parse   s   Arbitrary-precision integer
transform   x, [toRaw]  Radix conversion

Web Workers


Crunch 可以在 Web Worker 中加载. 指令信息通过如下格式传递:

{func: "", args: []}

例子 3


var crunch = new Worker("crunch.js");
var message = {func: "add", args: [[10, 123, 21, 127], [4, 211, 176, 200]]};

crunch.onmessage = function(m) {
    console.log(m);
};

crunch.postMessage(message);


注* 并且JavaScript中位运算所操作的是32位有符号整数,此运算目前还不支持对位运算的扩展。但据作者介绍,不久之后也会支持。





----
2014-12-14 更新: 位操作已经支持。  

原文地址: 点此
社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 2015年的JavaScript:Angular之类的框架将被库取代
  2. NodeJS就是癌症[2011]
  3. 提高NodeJS网站的安全性:Web服务器防黑客攻击技巧
  4. JavaScript的设计缺陷?浮点运算:0.1 + 0.2 != 0.3
  5. 什么是IndexedDB:Web离线数据库入门简介及基础教程
  6. HTML5的TCP和UDP Web Socket API草案定稿
  7. 为什么io.js要从Node.js中分裂出来?
  8. Node.JS编码规范指南教程:教你优雅地写JavaScript代码
  9. 避免Node.js中的命令行注入安全漏洞
  10. 从PhantomJS迁移到node-webkit:自动化测试框架简单比较
  11. AirJD-简单好用的免费建站工具

 相关阅读 - JS开源
  1. Webaudio-mod-player:用HTML5音频接口播放mod音乐文件
  2. HexGL用HTML5和WebGL实现的3D赛车游戏
  3. CSS3动画效果速查参照表
  4. LokiJS:用JavaScript实现的面向文档的内存数据库
  5. 基于HTML5和JavaScript实现的Winamp MP3播放器
  6. Walkway用简单的方法为SVG元素添加动画效果
  7. 15个最好用的Node.JS后端框架
  8. 将GO编绎成JavaScript,用GO语言来写前端代码
  9. JuliusJS: 基于JavaScript的在线语音识别库
  10. PathFinding.js: 基于JavaScript的开源智能寻路算法库

 关键字 - JavaScript
  1. 如何用CSS将select/option文本居中或居右对齐
  2. 40行JavaScript代码实现的3D旋转魔方动画效果
  3. 使用Javascript将相对路径地址转换为绝对路径
  4. 给checkbox选择框设置不选中时的值
  5. 用原生HTML5控件实现输入框自动提示(下拉列表补全)功能
  6. JavaScript中怪异的地方
  7. 在JavaScript中创建命名空间的几种写法
  8. JavaScript中的继承,构造函数以及new关键字的作用
  9. 纽约时报使用Html5 WebRTC记录访问者IP地址
  10. 正则中test、exec、match的简单区别,以及括号的用法

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号