首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Decimal.js tan的精度问题

Decimal.js tan的精度问题
EN

Stack Overflow用户
提问于 2017-10-14 11:46:04
回答 1查看 235关注 0票数 1

我一直在使用Decimal.js来提高我的函数的精度,该函数通过反复尝试计算a = tan(a)的正根。它工作,但它返回一个“精度限制超过”错误的nTan(504) (将返回4.4934.达到505位数)或更高。

代码语言:javascript
复制
var Decimal = require("decimal.js");
var fs = require("fs");

function nTan (acc, m) {
    var test = [1], acc = (parseInt(acc) || 15) + 1;
    Decimal.set({precision: acc});
    var n = new Decimal(fs.readFileSync("result.txt", "utf-8") || 4.4).toString();

    while (n.length + test.length - 2 < acc) {
        var dec = (new Decimal(n + test.join("")));
        if (dec.tan().cmp(n + test.join("")) >= 0) {
            test[test.length - 1]--;
            test.push(1);
        } else test[test.length - 1]++;

        if (test[test.length - 1] == 10) { test[test.length - 1] = 9; test.push(1); }
    }

    return (new Decimal(n + test.slice(0, -1).join(""))).plus(Math.PI * (parseInt(m) || 0)).toString();
}

我的问题是:

  1. 为什么Decimal.js不计算超过504位数时,它广告的容量高达和包括1e+9数字?
  2. 是否有其他节点或JS能够更精确地支持该程序?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-13 18:58:58

1000000000decimal.js 精度设置的最大允许值,但这并不意味着三角函数方法可以将结果返回到该数目的有效数字。

三角法的精度是由源代码中的Pi值的精度决定的。它作为字符串变量PI,在decimal.js文件中进行硬编码,其精度为1025数字。

这意味着cossintan方法的精度限制大约达到1000数字,但实际数字取决于传递给它们的参数的精度。若要计算实际数字,请使用

maximum_result_precision = 1000 - argument_precision

例如,以下两种方法都可以正常工作

代码语言:javascript
复制
Decimal.set({precision: 991}).tan(123456789);

Decimal.set({precision: 9}).tan(991_digit_number);

对于每个结果,结果精度加上参数精度,即991 + 99 + 991,小于或等于1000

这就是为什么您的程序在尝试计算参数的tan时失败的原因,该参数的数值超过500数字,精度超过500数字。

要做到这一点,需要Pi达到更高的精度--这只能通过编辑源代码中的值,即向其添加更多的数字来完成,而且可以简单地完成。这些方法所花费的时间将是限制因素。

我是图书馆的作者,我需要将这一点添加到它的文档中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46744170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档