嗯,这很有趣。我查看了 Barış 提供的链接。毕竟,它似乎可能与“方法复杂性”有关,但我不确定如何进一步测试它。我正在使用 Flash CS5,为 Flash Player 10、Actionscript 3 发布(当然)。
原来的:
function overflow(stack:int = 0):void {
if(stack < 5290){
trace(stack);
overflow(stack + 1);
}
}
// gives 5287
现在向 overflow() 方法添加一个 Math.random() 调用:
function overflow(stack:int = 0):void {
Math.random();
if(stack < 5290){
trace(stack);
overflow(stack + 1);
}
}
// gives 4837
添加多个 Math.random() 调用没有区别,也不会将其存储在局部变量中或向 overflow() 方法添加另一个参数以“携带”随机生成的值
function overflow(stack:int = 0):void {
Math.random();
Math.random();
if(stack < 5290){
trace(stack);
overflow(stack + 1);
}
}
// still gives 4837
此时我尝试了不同的数学调用,例如:
// just the change to that 1 line:
Math.pow() // gives 4457
Math.random(), Math.sqrt(), Math.tan(), Math.log() // gives 4837
有趣的是,传递给 Math 类的内容似乎并不重要,但它保持不变:
Math.sqrt(5) vs Math.sqrt(Math.random()) // gives 4837
Math.tan(5) vs Math.tan(Math.random()) // gives 4837
Math.pow(5, 7) vs Math.pow(Math.random(), Math.random()) // 4457
直到我链接了其中的 3 个:
Math.tan(Math.log(Math.random())); // gives 4457
看起来来自该“组”的两个 Math 调用与一个 Math.pow() 调用“相等”?=b 混合 Math.pow() 和其他东西似乎并没有降低价值:
Math.pow(Math.random(), Math.random()); // gives 4457
但是,链接两个 Math.pow():
Math.pow(Math.pow(Math.random(), Math.random()), Math.random()); // 4133
我可以继续说下去,但我想知道是否有某种模式:
Results: 5287, 4837, 4457, 4133
Differences: 450 380 324