2

Math.sqrt();似乎适用于长度小于 310 个字符的任何数字。

但是,任何 310 个字符或以上的数字都将返回无穷大......

如果你想自己测试一下,这里是 jsfiddle http://jsfiddle.net/gqhk9/2

无论如何,我需要得到数字的平方根,包括一些 310 个字符或更长的数字。

我怎么能在js中做到这一点?

4

4 回答 4

8

这不是问题Math.sqrt- 摆脱Math.sqrt呼叫,您仍然会看到无穷大。基本上,Javascript 无法处理这么大的数字——它超出了 64 位浮点 IEEE 754 值的范围。您需要找到某种库来处理任意大小的整数。

请注意,即使对于小于 10 309的数字,您仍然会在前 15 位数字之后丢失信息。如果您关心所有这些数字,那么您应该再次查看专业数学库。

快速浏览网络发现BigInt.js引用了几次,但我不知道它有多好。

于 2012-03-26T06:07:21.797 回答
2

Number.MAX_VALUE

  • MAX_VALUE物业的价值约为 1.79E+308。
  • 大于MAX_VALUE的值表示为 "Infinity"
于 2012-03-26T06:08:32.577 回答
1

Javascript 数字不可能那么大。

如果你输入

javascript:123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

在您的地址栏中,您还将获得Infinity.

您需要使用 bignum 库。

于 2012-03-26T06:07:33.857 回答
1

The number that you are starting with, 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890, is Infinity, and Math.sqrt(Infinity)is Infinity.

你需要的是一个大整数库来模拟它,例如http://www.leemon.com/crypto/BigInt.html;然后你可以将你的大整数乘以 0.5 的幂来计算平方根。

于 2012-03-26T06:08:51.663 回答