问题标签 [mandelbug]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
540 浏览

android - WakeLock 相关的 Mandelbug:WakeLock.acquire() 总是成功吗?

问题

我已经为 Android 开发了很长一段时间了。我开发的其中一个程序大量使用了WakeLocks。它通常是完美的(通常一次几天或几周,这是程序的要求),但我很少注意到这段代码中的特殊行为:

wherehasWakeLock()简单地返回结果(wakeLock != null && wakeLock.isHeld())wakeLockManager.newPartialWakeLock(DEBUG_TAG)封装了标准的“获取 PowerManager 然后返回唤醒锁”代码。出于测试的目的,断言语句是 JUnit 断言方法,所以我认为我们可以假设它们是正确的。

代码的问题是:最后的断言assertTrue(hasWakeLock())- 似乎每隔几周就会失败一次,几乎没有解释。这意味着我在这里有三个可能的问题:(1)从未从 PowerManager 中检索到唤醒锁(2)我有一个并发问题,在极少数情况下,它在后置条件之前但在调用之后才生效acquire(),或者(3)acquire()有时是错误的。

问题调查

如上所述,我正在调查/已调查可能发生的三个潜在问题:

假设 1:未返回唤醒锁

如果是这种情况,那么我会看到一个空指针异常。不可能这样。

假设 2:我有一个并发问题

刚刚对所有涉及获取和释放的地方进行的形式验证证明wakeLock强烈地让我相信情况并非如此。如果我的证明有问题,那么我可能会遇到并发问题,但它确实很隐蔽且很难找到。

假设 3: WakeLock.acquire() 是错误的,尽管文档说它有时可能无法获取锁

我不喜欢这个假设,因为对于所有的 Android 用户,除了我自己之外,肯定有人已经注意到了这一点,而且几乎总是开发人员的代码,而不是库或操作系统代码有问题。再一次,奇怪的事情发生了,这可能是一个真正的 Android 错误,尽管很少出现。如果这个假设是真的,那么 acquire() 根本就没有获得唤醒锁,这将解释我所看到的行为。

那么 StackOverflow,是什么导致了这个问题?你觉得哪里不对?我是否遗漏了一些明显的东西,或者这可能是 Android 唤醒锁的真正问题?

0 投票
1 回答
307 浏览

python - 使用 NumPy 和 Pillow 绘制 Mandelbrot 时,程序输出明显的噪声

以前,我使用海龟在 python 中创建了一个 Mandelbrot 生成器。现在,我正在重新编写程序以使用 Python Imaging Library,以提高速度并减少对图像大小的限制。

但是,下面的程序只输出 RGB 废话,几乎是噪声。我认为这与 NumPy 和 PIL 处理数组的方式不同有关,因为在执行和时说l[x,y] = [1,1,1]wherel = np.zeros((height,width,3)) 不仅仅使 1 个像素变白。img = Image.fromarray(l)img.show()

更新 1:

我意识到这个程序中的一个主要错误(我敢肯定有很多)是我使用 x,y 坐标作为复系数!所以,0 到 100 而不是 -1.25 到 1.25!我已经更改了这一点,因此代码现在使用变量 a,b 来描述它们,以我从海龟版本中的一些代码中窃取的方式递增。上面的代码已相应更新。由于当前已注释掉平滑着色算法代码以进行调试,因此该inf变量已减小到2大小。

更新 2:

我在一位优秀用户的帮助下编辑了 numpy 索引。当设置为 200 x 200 时,程序现在输出:

失败的曼德布罗

正如你所看到的,它确实显示了一些数学形状,但却充满了所有这些奇怪的红色、绿色和蓝色像素!为什么这些会在这里?我的程序只能将 RGB 值设置为默认值[1,1,1]或将其保留为默认值[0,0,0]。不可能是[1,0,0]这样的——这一定是一个严重的缺陷……

更新 3:

我认为 NumPy 和 PIL 的集成存在错误。如果我l = np.zeros((100, 100, 3))先声明然后声明l[0,0,:] = 1,最后声明img = Image.fromarray(l)& img.show(),这就是我们得到的:

不仅仅是1个白色像素!

在这里,我们得到一系列彩色像素。需要另一个问题。

更新 4:

我不知道以前发生了什么,但似乎有一个np.uint8数组,Image.fromarray()使用 0-255 的颜色值。有了这个智慧,我离了解这只曼德虫又近了一步!

现在,我确实得到了一些模糊的数学知识,但它仍然输出奇怪的东西。

白色背景中的黑色圆圈。

这个点就是全部......如果我更改为np.uint16,我会得到更奇怪的东西,我想是由于不同的字节形状和编码方案。

0 投票
1 回答
193 浏览

python - NumPy 的数组系统和 PIL 的 Image.fromarray() 有区别吗?

这与更大的曼德尔虫有关,但这是其中的主要部分。

如果我这样做:

我明白了:

错误的像素。

这显然不是我对图像执行的操作。如果你看左上角,它会显示一堆绿色、蓝色和红色等像素,而我希望它会产生 1 个像素(左上角)白色/灰色。

怎么了?