Math.sqrt()返回无穷大?

时间:2012-03-26 06:04:02

标签: javascript math infinity square-root

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

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

如果您想自己测试一下,请点击jsfiddle http://jsfiddle.net/gqhk9/2

无论如何,我需要获得数字的平方根,包括310个字符和更长的数字。

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

4 个答案:

答案 0 :(得分:8)

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

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

快速浏览网页{@ 3}}引用了几次,但我不知道它有多好。

答案 1 :(得分:2)

请看Number.MAX_VALUE

  
      
  • MAX_VALUE属性的值约为1.79E + 308。
  •   
  • 大于MAX_VALUE的值表示为“无限”
  •   

答案 2 :(得分:1)

Javascript数字不能那么大。

如果您输入

  

javascript:123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

在地址栏中,您还会获得Infinity

您需要使用bignum库。

答案 3 :(得分:1)

这你开始使用,1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890数,为Infinity,和Math.sqrt(Infinity)Infinity

您需要的是一个用于模拟它的大整数库,例如http://www.leemon.com/crypto/BigInt.html;那么你可以用你的大整数到0.5的幂来计算平方根。