老师,我问一个js计算精度的问题...
来源:2-6 算术表达式
程序媛小灯
2021-03-11 21:44:11
是这样的,leetcode上有道斐波那契数列的题,题目要求最后结果要取一下模。
我用下面这种方法实现,当n>=79的时候,应该是js本身精度的问题,取模后得到的答案总是与正确的答案有一点误差。我尝试用parseInt转换一下也不行。
这种很大的数产生的精度问题,有什么方法能够解决吗
/**
* @param {number} n
* @return {number}
*/
// 递归会超时
var fib = function(n) {
if(n == 0) return 0;
if(n == 1) return 1;
const arr = [0, 1];
for(let i=2; i<=n; i++){
arr.push(arr[i-1] + arr[i-2]);
}
return parseInt(arr[n] % parseInt(1e9+7));
};
谢谢老师!
1回答
同学你好,一般做减法和除法运算时,会丢失精度。但是实际开发中,老师没有遇到较大数字的计算精度问题。所以对这方面不太了解。如果是浮点数的话,老师了解一点。可以给同学讲一下,增加它的倍数去计算。例如如下:
结果是浮点数时,那么可以乘以1000,最后让结果再除以1000。
另外,也有一些前辈写过解决精度问题的插件,例如 bignumber.js、decimal.js。同学可以在网上找一找插件,看看是否能解决此问题。这个其实没有什么万全之策,只能是尽量去解决。
祝学习愉快~
相似问题