gpt4 book ai didi

javascript - 更高的 JavaScript 精度

转载 作者:行者123 更新时间:2023-12-04 09:15:17 24 4
gpt4 key购买 nike

我试图在 JavaScript 中使用更高精度的数字进行计算,以便能够在 Mandlebrot 集上放大更多。
(经过一定程度的缩放后,由于精度低,结果会“像素化”)
我看过this question ,所以我尝试使用 BigNumber 之类的库,但速度慢得无法使用。
我一直在尝试解决这个问题,我认为唯一的方法是使用慢速库。
有没有更快的图书馆?
有没有其他方法可以使用更高精度的数字进行计算?
有没有其他方法可以在 Mandlebrot 集上放大更多?
可能不需要添加此代码,但这是我用来检查点是否在 Mandlebrot 集中的函数。

function mandelbrot(x, y, it) {
var z = [0, 0]
var c1 = [x, y]

for (var i = 0; i < it; i++) {
z = [z[0]*z[0] - z[1]*z[1] + c1[0], 2*z[0]*z[1] + c1[1]]
if (Math.abs(z[0]) > 2, Math.abs(z[1]) > 2) {
break
}
}
return i
}

最佳答案

关键不在于 JavaScript 数字的原始数字精度(尽管这当然有其影响),而是基本 Mandelbrot“逃逸”测试的工作方式,特别是阈值迭代计数。要计算复平面中的一个点是在集合中还是在集合外,您可以一遍又一遍地迭代该点的公式(我不完全记得并且不想查找)直到该点明显发散(公式从复平面的原点“逃脱”了很多)或在达到迭代阈值之前不发散。
在渲染围绕复平面原点(从原点向各个方向大约 2 个单位)覆盖大部分 View 的集合 View 时,迭代阈值可以低至 500,以便在现代计算机上的合理放大倍数。但是,当您放大时,迭代阈值需要与复平面上“窗口”的大小成反比增加。如果不是,那么“逃逸”测试就不能以足够的精度在更高的放大倍数下描绘出精细的细节。
我在 JavaScript 实现中使用的公式是

maxIterations = 400 * Math.log(1/dz0)
哪里 dz0是(任意)窗口在平面上的宽度。当一个人放大到集合的 View (好吧,集合的“边缘”,事情有趣的地方), dz0变得非常小,因此迭代阈值上升到数千。
当然,对于“逃逸”的点(即不属于 Mandelbrot 集的点)的迭代计数可以用作一种“距离”测量。在几次迭代内逃逸的点显然不是“接近”集合,而仅在 2000 次迭代后逃逸的点则更接近。这种距离质量可以在可视化中以各种方式使用,如果集合被渲染为 3D View (将集合作为一种“台面”在三个维度,边界是侧面的垂直“悬崖”)。

关于javascript - 更高的 JavaScript 精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63251702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com