Javascript 我可以限制浮动精度吗?

Javascript 我可以限制浮动精度吗?,javascript,floating-point,Javascript,Floating Point,我正在用JS在画布上编写一个简短的演示,但它并没有像它应该的那样顺利运行,主要是因为它涉及到很多正弦和余弦 我需要做那些计算,把东西画到屏幕上。问题是,我不需要7位小数就知道像素位置2已经是多余了,所以我想如果我能将浮点运算限制在小数点后两位,它可能会运行得更快一些。这可能吗?如果你坚持整数,你可以画得更快。例如,您可以使用基于整数的算术。无法修改浮点类型的精度:它们由硬件和通常的语言标准固定。在另一种语言中,您可能可以使用精度较低的类型,例如,在C中,您可以使用浮点而不是双精度,但在JavaS

我正在用JS在画布上编写一个简短的演示,但它并没有像它应该的那样顺利运行,主要是因为它涉及到很多正弦和余弦


我需要做那些计算,把东西画到屏幕上。问题是,我不需要7位小数就知道像素位置2已经是多余了,所以我想如果我能将浮点运算限制在小数点后两位,它可能会运行得更快一些。这可能吗?

如果你坚持整数,你可以画得更快。例如,您可以使用基于整数的算术。

无法修改浮点类型的精度:它们由硬件和通常的语言标准固定。在另一种语言中,您可能可以使用精度较低的类型,例如,在C中,您可以使用浮点而不是双精度,但在JavaScript中这是不可能的,因为所有数字都是双精度的

你可以做的是使用一个更快的近似正弦函数。通常,正弦/余弦函数由两个步骤组成:

在区间[-π/4,π/4]上求整数n和浮点y的范围缩减,使得x=n*π/2+y。这不能使用标准的mod%运算来执行,因为π不能用浮点数精确表示。 一种核函数,用于计算适当的sin/cos,通常使用多项式近似。 您可以看到V8源代码

因此,您可以做以下几件事:

使用已经缩减到适当间隔的参数,或者使用近似缩减,即y=x%Math.PI/2

使用更快、更不精确的近似值来表示sin/cos:网络上有很多关于这方面的东西,例如


我请你解释一下为什么这可能是不可能的。太长,读不下去了它可能是用硬件实现的。不过,你可以试着编写自己的近似值。计算速度与小数位数无关。如果你在一个紧凑的循环中调用TIG函数很多,考虑一个预先填充的查找表在页面加载中填充一次。而且,这是一种微优化,其中没有使用某种形式的PrimeReJavaScript的Rikes没有整数:仍然可以坚持算术较轻的算法,例如,同样的例子,在不提取平方根的情况下绘制圆。