老师,我问一个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 == 0return 0;

    if(n == 1return 1;

    const arr = [01];

    for(let i=2; i<=n; i++){

        arr.push(arr[i-1] + arr[i-2]);

    }

    return parseInt(arr[n] % parseInt(1e9+7));

};

http://img.mukewang.com/climg/604a1e020998fd1c03240238.jpg


谢谢老师!

写回答

1回答

好帮手慕夭夭

2021-03-12

同学你好,一般做减法和除法运算时,会丢失精度。但是实际开发中,老师没有遇到较大数字的计算精度问题。所以对这方面不太了解。如果是浮点数的话,老师了解一点。可以给同学讲一下,增加它的倍数去计算。例如如下:


http://img.mukewang.com/climg/604acf6509dc715f02940058.jpg

结果是浮点数时,那么可以乘以1000,最后让结果再除以1000。

http://img.mukewang.com/climg/604ad002099d6d7202750064.jpg

另外,也有一些前辈写过解决精度问题的插件,例如 bignumber.js、decimal.js。同学可以在网上找一找插件,看看是否能解决此问题。这个其实没有什么万全之策,只能是尽量去解决。

祝学习愉快~

0

0 学习 · 15276 问题

查看课程