【发布时间】:2020-09-21 22:25:03
【问题描述】:
我有一个循环随着迭代次数的增加而减少。我需要计算它将经历的迭代次数(我在这个问题的底部解释了为什么我需要这个)。前6步是
0.50, 1.50, 1.83, 2.11, 2.34, 2.55, ...
计数从 0.5 开始并以递减的速度增长,直到达到 20。循环归结为:
var SCALE = 0.5; // Starting value, also affects increment
var MAX = 20; // Maximum value
var i = 0; // Just for counting
for (var count = SCALE; count < MAX; count += SCALE / count) {
console.log(count, i);
i++;
}
您可以看到,由于count += SCALE / count,图表的增长速度越来越慢,因此随着计数的增加,分母也会增加。
我认为它遵循指数 pow(MAX, 1 / SCALE) 线,但不完全是:
MAX = 5 : 23 iterations Math.pow(5, 2) = 25
MAX = 10 : 97 iterations Math.pow(10, 2) = 100
MAX = 15 : 222 iterations Math.pow(15, 2) = 225
MAX = 20 : 397 iterations Math.pow(20, 2) = 400
另外,当SCALE 不是 0.5 时,这种方法就会失效。
问题
我可以使用什么公式同时考虑 SCALE 和 MAX 来获得迭代次数?
我为什么需要这个?
我正在尝试将示例代码at the bottom of this article 转换为 GLSL 着色器代码。问题是显卡只能执行整数计数到一个常数的for循环,所以我需要知道在开始循环之前循环将进行多少次迭代。
我需要这样的东西:for(int i = 0; i < MAX_COUNT; i++),但首先我需要知道MAX_COUNT 会是什么。
【问题讨论】:
-
看起来是
log plot不是吗? -
@RahulDwivedi 我对此表示怀疑...记录图are negative in the [0, 1) range。它看起来更像square root graph,但我无法破解它。
-
@trincot 哦,该图看起来更像我得到的结果。我想你是对的,看了这篇文章,感觉如果我先做一个测试循环,计算
i会更容易,并将迭代次数保存在一个常量中,以便在我的实际代码中使用。跨度> -
@trincot 如果我错了,请纠正我,但我不认为这是一个谐波级数,因为除数是
count的值而不是当前的迭代次数(即count += SCALE / i)。 -
你说得对,@meowgoesthedog,这不是谐波系列。
标签: javascript math glsl logarithm asymptote