【发布时间】:2013-12-06 22:03:07
【问题描述】:
我在我的项目中使用Math.pow() 计算指数值。
现在,对于像Math.pow(3,40) 这样的特定值,它返回12157665459056929000。
但是当我使用科学计算器尝试相同的值时,它返回12157665459056928801。
然后我尝试遍历循环直到指数值:
function calculateExpo(base,power){
base = parseInt(base);
power = parseInt(power);
var output = 1;
gameObj.OutPutString = ''; //base + '^' + power + ' = ';
for(var i=0;i<power;i++){
output *= base;
gameObj.OutPutString += base + ' x ';
}
// to remove the last comma
gameObj.OutPutString = gameObj.OutPutString.substring(0,gameObj.OutPutString.lastIndexOf('x'));
gameObj.OutPutString += ' = ' + output;
return output;
}
这也返回12157665459056929000。
JS中对Int类型有什么限制吗?
【问题讨论】:
-
谁来定义
scientific calculator是真实的还是math.pow?你试过第三种方法吗?如果有限制,则适用于科学计算器的结果,即较小的值 -
这种情况下科学计算器是正确的。
-
@JosephMyers 至少这个数字是奇数,这暗示它更有可能是正确的......
-
@JosephMyers 怎么样?你能用一个论点来支持它吗?
-
我最近阅读了一篇关于此的博客文章,但我找不到它。我能找到的最接近的东西在这里:stackoverflow.com/questions/588004/…。基本上,我认为这是因为 javascript 使用 64 位,然后最终当数字变得足够大时,它开始在更改之前连续为 2 次幂为您提供相同的数字。
标签: javascript math integer user-defined-functions