JavaScript中整数的最大"安全"数值为在-(2^53 - 1) 和 (2^53 - 1) 之间,即:
超过这个范围的数学计算在有可能是是不准确的,比如在目前最新版的Chrome中:
实现结果应该是: 2305843009213693696 即损失了一定的精度。
JavaScript中的Number对象有一个 Number.isSafeInteger 可以判断此数值是否在安全范围:
Crunch是用JavaScript写的一个任意精度的整数运算库。
它被设计用来快速地执行算术运算,特别是那些基于非对称加密密码系统诸如RSA构建。
Crunch 可以用被网站引用
或者在web worker中引用
或者在node模块中使用
范例 1
这个库使用8位(最大256)整型数组来表示“大整数”。但是在其内部它会被自动转换为28位整型数组。
Crunch 同样可以转化和解析成10进制的字符串,(string上面的默认方法是无法表达大整数的) 使用.stringify() 和 .parse() 方法.
范例 2
Crunch 可以在 Web Worker 中加载. 指令信息通过如下格式传递:
例子 3
注* 并且JavaScript中位运算所操作的是32位有符号整数,此运算目前还不支持对位运算的扩展。但据作者介绍,不久之后也会支持。
----
2014-12-14 更新: 位操作已经支持。
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 更新: 位操作已经支持。
crunch链接呢
@马扔人 #0
请查看原文地址