【问题标题】:javascript - What are my client-side options?javascript - 我的客户端选项是什么?
【发布时间】:2012-09-05 20:14:07
【问题描述】:

我喜欢 javascript,不要误会我的意思,但我的问题是我目前想开发用于科学计算的开源 Web 应用程序,而 javascript 的算法并不是最精确的。我编写了服务器端脚本,但我更喜欢客户端,原因很明显,用户体验通常更流畅,服务器上的负载更少。

就解决此问题而言,我有哪些选择?我在某处读过,你可以在 javascript 之上实现语言——这值得吗?这是什么样的?如果我在 javascript 之上实现 python,这是否意味着客户端需要 python 解释器才能使用该站点?

我就是受不了

0.1 + 0.2 == 0.3 // is False

【问题讨论】:

  • 我想你需要的是切换客户端的沙箱。使用纯 javascript 或某些翻译为 javascript 的语言,您将遇到浏览器使用的精度问题。要使用精确的算术运算,您可能必须从纯 javascript 切换到 Flash、Java、ActiveX 或其他东西。
  • 仅供参考,您会在 C、C++、Java、Python 和任何其他使用浮点数的语言中发现完全相同的问题(即0.1+0.2!=0.3)。有时,如果您有幸拥有支持它们的语言,您可以选择使用原生 fixed point numbers;否则,您将不得不使用数字库。

标签: javascript client-side scientific-computing scientific-software


【解决方案1】:

浮点运算是近似计算

这并没有错,请查看更多信息

Weird programing behavior

这不是 JavaScript 特有的,而是在整个编程中很常见

这是我在 chrome 上得到的:

0.1 + 0.2 = 0.30000000000000004;

以下是关于该主题的简单但出色的阅读:

What Every Programmer Should Know About Floating-Point Arithmetic

为什么我的数字,比如 0.1 + 0.2 加起来不是很好的 0.3 轮,而是得到一个奇怪的结果,比如 0.30000000000000004?

因为在内部,计算机使用一种格式(二进制浮点) 根本无法准确表示像 0.1、0.2 或 0.3 这样的数字。

当代码被编译或解释时,你的“0.1”已经 以该格式四舍五入到最接近的数字,这会导致小 甚至在计算发生之前就有舍入误差。

【讨论】:

    【解决方案2】:

    有一些库可以实现更好的数学运算:

    但是,我强烈建议在服务器端进行此操作。您可以轻松地通过 AJAX 实现,而不必担心响应速度。 Javascript 并不是真正为数字而构建的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-01
      • 2010-11-11
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多