我想计算(A / B)的一些(C / D)根与 arbitrary precision 的根的十进制扩展(例如,如果所需的精度是整数 E
,结果应该包含根的 E
个数字 after the decimal point ; E
可能等于至少数万; A,B,C,D是包含数万个十进制数字的整数),但我找到的所有Javascript数学库都将拒绝处理这些数字 .
我尝试使用Decimal.js,但它的精度有限且输入的大小有限 . 例如,如果我想计算2的平方根有1025个有效数字(最后一个数字可能以某种方式舍入),我使用以下代码为Decimal.js:
Decimal.set({ precision: 1025 });
var r2 = Decimal.pow(2, Decimal.div(1, 2)).toDP(1025).toString();
console.log(r2);
但我明白了
Error: [DecimalError] Precision limit exceeded
是否有可能使用客户端(在浏览器中工作)Javascript来解决问题?据我所知,有一些有效的算法来计算根,即使是 millions 的数字,但我没有看到任何这些在JS中实现任意大数和任意精度 . 有可能吗?
1 回答
在
decimal.js
中,将precision
设置为1025
会在一个数字中为您提供总共1025(尾数)的十进制数字 ..toDP(1025)
指小数点后的数字或小数位,在本例中需要总共1026个尾数,因为小数点前有一个数字1
.可以假设这些方法使用适当增加的内部工作精度,使得输出相对于舍入是正确的 . 这意味着如果以更高的精度重新计算,最后一位数可能不同 . 如果要防止这种情况,请将舍入模式设置为
round-down
(朝向零) .精确度大于1020的幂方法失败的原因是内部精度超过1025,这是以字符串形式给出的内部
LN10
常量的长度 . 该错误是因为针对这种情况的明确测试 .您可能为此库使用1000位数结果作为牛顿方法的初始点以获得改进的结果 .