如何使这个函数更加精确?

4

我是一名初学者,我编写了一个函数来计算半圆形无限蛇形图的长度。我接受两个参数;一个是初始圆的半径,另一个是精度(即半圆数量)。

这是我所说的蛇形图的示意图。

以下是我的代码:

function snake(radius, precision) {
    var pi = 3.14159265359
    var exp = 1 - precision; 
    var sub = Math.pow(2, exp);
    var product = 2 - sub;
    var length = pi * radius * product
        return length
}

我注意到在一个点上,当我输入很大的值时,其精度已不重要了,因为返回的值是相同的。有没有方法可以使它更加精确?


不要忘记加分号。 :) - selbie
我认为这里的“精确”由于浮点偏差有限制... - Lab
@Acc-lab 这是什么意思? - Nelser
@Nelser 请参阅 https://docs.python.org/3/tutorial/floatingpoint.html。除非您使用一些替代方法来存储浮点数,例如 fractions 模块,否则偏差是不可避免的。 - Lab
3个回答

3

您可以使用常量Math.PI代替pi变量。


谢谢!但是我如何使用变量使函数更精确?在大约55个半圆左右,它达到了峰值并且不再改变。这是因为添加的值太小还是可以更改的问题? - Nelser

2

感觉你需要使用Number.toPrecision()。 以下是稍微清理过的代码片段。 对于返回值,我正在使用length.toPrecision(50)

function snake(radius, precision) {
    const exp = 1 - precision; 
    const sub = Math.pow(2, exp);
    const product = 2 - sub;
    const length = Math.PI * radius * product;
    return length.toPrecision(50);
}

console.log(snake(5, 55));

您可以在此处了解有关toPrecision()的更多信息。最大精度值为100。


1
这将是我的方法,
根据屏幕截图,长度可以通过以下系列的总和获得, PI X R (1 + 1/2 + 1/4 + ...) S(n) = PIxR(1-0.5^n)/(1-0.5) 因此,JavaScript函数如下,
function length(r, n) {
 const ln = Math.PI * r * (1 - Math.pow(0.5, n))/(1 - 0.5);
 return ln.toPrecision(50);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接