我有这个函数,它只是一个总和和一个产品。 对于某些价值观而言,其他人的工作不是正确的结果。
Codia function (r, c) {
return ((r + c) * (r + c + 1));
}
alert(Codia(1908229752,0));
通过函数获得的结果:3641340788326211000
我计算的结果:3641340788326211256
你能告诉我我错在哪里吗?
答案 0 :(得分:4)
JavaScript并非旨在精确计算。一旦你有浮点数,双精度数或大于Number.MAX_SAFE_INTEGER
的数字(即9007199254740991),数字将开始失去准确性。以下是您的预期答案与最大安全整数的比较:
3,641,340,788,326,211,256 EXPECTED ANSWER
9,007,199,254,740,991 MAX_SAFE_INTEGER
要解决此问题,请使用专为大数字算术设计的库,或自行设计新算法。
以下是使用BigNumber.js返回正确答案3641340788326211256的示例:http://jsfiddle.net/DerekL/jj47touj/