gpt4 book ai didi

javascript - 创建 JavaScript 数学库中的算术

转载 作者:行者123 更新时间:2023-11-28 01:18:49 26 4
gpt4 key购买 nike

我正在为 JavaScript 制作一个数学库,只是我希望能够以字符串格式添加大数字,因为 JavaScript 中的浮点不能永远保留,你只能添加到最大值。所以我考虑在字符串中制作数字,然后手动计算它们,例如:

2524618239759212479135012 + 128590322830498023412234 = 2653208562589710502547246

在JS中:2524618239759212479135012 + 128590322830498023412234 = 2.6532085625897103e+24

所以我想这样做:

function Add(strA, strB) {
// How am I going to calculate it?
}

"2524618239759212479135012"+ "128590322830498023412234"= "2524618239759212479135012128590322830498023412234" 这肯定不起作用,我希望能够通过算法、使用数组或字符串来做到这一点?

我知道如何简单地将它们放置起来,例如:

  22
+ 23
---
55

但是我该如何将其实现到我的代码中呢?

最佳答案

从一些测试开始。

您将需要乘除一些大数来为您的大整数库创建一些测试用例。这样做的过程将是了解代码如何处理数字的良好开端。

考虑乘法:

  23
x 45
----
115
+920
----
1035

本质上,我们将乘法分解为 3*45 + 20*45。但我们可以更进一步,把它变成3*5 + 20*5 + 3*40 + 20*40。这种方式更像是矢量点积:

| 3|   | 5|
|20| . |40|

重点是,您可以将给定的操作分解为一系列较小的操作,将其结果组合起来以获得最终值。

我会选择数字而不是字符串值,因为字符串速度很慢且不明确(“0”==“00”...),并且您需要沿线的某个位置转换为数字。考虑从一系列 float 构造每个数字;指数将保存比例信息,尾数将保存数字。因此 3 + 20 等价于 3e0 + 2e1。在二进制中,23 是 10111,可以是 1e111 + 111e0 (1x2^5 + 7x2^0)。在 javascript 中,所有数字都以 IEEE-754 double float 形式保存,因此您有 52 位尾数和 11 位指数。

考虑将大整数重写为二进制,并将其 24 位放入每个 float 中;由于最大的 24 位整数是 2^23,因此您可以将 (2^23)^2 放入单个 float 中(需要 46 位)。这将允许您一次执行 24 位乘法,并且每次乘法的结果将保证适合浮点变量。然后,您可以使用一些余量(52-46=6 位,=> 2^5 = 1024)执行所有进位操作。一个大整数的存储将只是一个数字数组,您可以毫不费力地进行加法和乘法。

要了解如何进行除法,请编写大整数除法的单元测试,这应该具有指导意义。

关于javascript - 创建 JavaScript 数学库中的算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23476508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com