Hm, to jest interesujące. Spojrzałem na link, który dał Barış. Wygląda na to, że może być ze "złożonością metody", ale nie jestem pewien, jak ją przetestować. Używam Flash CS5, publikowanie dla Flash Player 10, Actionscript 3 (oczywiście).
oryginalny:
function overflow(stack:int = 0):void {
if(stack < 5290){
trace(stack);
overflow(stack + 1);
}
}
// gives 5287
Teraz dodanie jednego Math.random() zadzwonić do przepełnienia() metoda:
function overflow(stack:int = 0):void {
Math.random();
if(stack < 5290){
trace(stack);
overflow(stack + 1);
}
}
// gives 4837
Dodawanie wielu Math.random() wywołuje żadnej różnicy, ani zapisuje go w zmiennej lokalnej lub dodaje inny parametr do metody overflow() w celu przeniesienia tej losowej wygenerowanej wartości do wartości domyślnej
function overflow(stack:int = 0):void {
Math.random();
Math.random();
if(stack < 5290){
trace(stack);
overflow(stack + 1);
}
}
// still gives 4837
W tym momencie Próbowałem różnych połączeń matematyczne, takie jak:
// just the change to that 1 line:
Math.pow() // gives 4457
Math.random(), Math.sqrt(), Math.tan(), Math.log() // gives 4837
Co ciekawe, to nie wydaje się ważne, co można przejść do klasy Math, ale pozostaje na stałym poziomie:
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
Aż przykuty 3 z nich:
Math.tan(Math.log(Math.random())); // gives 4457
to wygląda jak dwa Math wymaga od tej „grupy” jest „równy” do jednego Math.pow() zadzwonić? = B Mieszanie Math.pow() i coś innego nie wydaje się, aby zmniejszyć wartość mimo:
Math.pow(Math.random(), Math.random()); // gives 4457
Jednak łączenia dwóch Math.pow() 's
Math.pow(Math.pow(Math.random(), Math.random()), Math.random()); // 4133
mogę iść w kółko, ale zastanawiam się, czy istnieje jakiś wzór:
Results: 5287, 4837, 4457, 4133
Differences: 450 380 324
Niektóre informacje na ten temat: http://jacksondunstan.com/articles/949 –
Interesujące. W programie Flash Professional również i ja pomyłkę po 5287. Jednak po uruchomieniu projektu AIR z FlashDevelop, stos osiąga zaledwie 12 000 zanim FlashTevelop 'Trace Overflow' zostanie wyrzucony i bez śladu stos będzie się mylił tuż przed 14,080. – TheDarkIn1978
Przypuszczam, że najcenniejszą rzeczą jest to, jaki byłby dolny limit na tym poziomie. – Marty