我可以限制浮动精度吗?

时间:2015-03-11 10:30:12

标签: javascript floating-point

我正在使用JS在Canvas中编写一个简短的演示程序,它的运行速度并不像应该的那样顺畅,主要是因为涉及到很多正弦和余弦。

我需要进行这些计算才能将内容绘制到屏幕上。问题是,我不需要7个小数来知道一个像素位置(两个已经是矫枉过正),所以我想如果我可以将浮点运算限制在两个小数位,它可能运行得更快一些。 ¿甚至可能吗?

2 个答案:

答案 0 :(得分:0)

如果你坚持使用整数,你可以更快地绘制。例如,您可以draw a circle使用基于整数的算法。

答案 1 :(得分:0)

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

您可以做的是使用更快的近似正弦函数。通常,sin / cos函数包含两个步骤:

  1. “范围减小”以在区间[-π/ 4,π/ 4]上找到整数n和浮点y,使得x = n *π/ 2 + y。这不能使用标准mod(%)操作来执行,因为π不能用浮点数精确表示。
  2. “内核”函数,用于计算适当的sin / cos,通常使用多项式近似。
  3. (您可以看到V8来源here)。

    所以你可以做几件事:

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

    • 使用更快(更不准确)的sin / cos近似值:网上有很多关于此的内容,例如: here