javascript - 在 Javascript 和 MATLAB 中计算 pi - 不同的速度
问题描述
我发现了一个令人兴奋的关于用 Javascript 计算 pi 的链接: http ://ajennings.net/blog/a-million-digits-of-pi-in-9-lines-of-javascript.html?utm_source=Iterable&utm_medium=email&utm_campaign=the -溢出通讯&utm_content=10-03-19
我从来没有用 Javascript 编程,但我设法使用“符号数学工具箱”将它翻译成 MATLAB。这是我的代码(包含作为 MATLAB 注释行的 Javascript 代码)
%% A Million Digist of Pi in 9 Lines of Javascript
% http://ajennings.net/blog/a-million-digits-of-pi-in-9-lines-of-javascript.html
% let i = 1n;
% let x = 3n * (10n ** 1020n);
% let pi = x;
% while (x > 0) {
% x = x * i / ((i + 1n) * 4n);
% pi += x / (i + 2n);
% i += 2n;
% }
% console.log(pi / (10n ** 20n));
% MATLAB Code
n = 1000; % Number of digits
k = sym(1);
x = 3 * (10^sym(n));
pi = x;
tic
while x > 1/2
x = x * k / ((k + 1) * 4);
pi = pi + x /(k + 2);
k = k +2;
end
fix(pi)
toc
我现在的问题:
为什么使用 Symbolic Math Toolbox 的 Javascript 比 MATLAB 快? 注意:代码使用无限整数。换句话说:为什么 Javascript 的“无限位整数”比 Matlab 中的符号整数快。或者不是吗?
在 MATLAB 中 1000 位用了 16 秒,而且不少于 1 秒(见链接)!
这对我来说似乎有点奇怪,因为通常 MATLAB 非常快(我知道不是最快的)。
如果有人问自己,你到底为什么要这么做?首先,它很有趣 - 其次:我需要 MATLAB,我喜欢它
感谢您的任何回答!
解决方案
符号数学工具箱 - 顾名思义 - 符号数学,这意味着它进行代数计算,但这需要大量计算,因此非常慢。JavaScript 不使用代数计算,它只是使用内置的 BigInt 类型。尝试在没有 the 的情况下执行相同的操作sym
,您会发现它会快很多,例如您可以使用uint64
整数:
n = uint64(18); % Number of digits
k = uint64(1);
x = 3 * uint64(10)^n;
pi = x;
tic
ctr = 0
while x > 1/2
ctr = ctr + 1;
x = x * k / ((k + 1) * 4);
pi = pi + x /(k + 2);
k = k +2;
end
fix(pi)
toc
推荐阅读
- python-3.x - 矩阵N x N x 3,获取内部3数组的第一个元素
- c# - 如何在 XAF WinForms 应用程序中使用 Oid 在 DetailView 中打开记录?
- algorithm - 执行矩阵链乘法期间的分段错误
- python - 在scrapy中制作循环的正确方法是什么?
- c# - FluentValidation 子验证器中的 PropertyName
- python - 如何避免 Python 中臃肿的日志文件?
- c++ - 使用滚动条时如何获得正确的窗口客户区大小?
- javascript - 为什么对 MongoDB 的猫鼬查询返回空数组?
- android - MacOS & Android Studio - 生成的 apk(文件)无法安装在设备上
- r - 多列展开