AS3の謎(ただのループなのにスタックオーバーフロー)
下のコードを実行すると、スタックオーバーフローが発生する。謎。
package { import flash.display.*; public class Test extends Sprite { private var t:Number; public function Test(){ var N:int = 100000000; log(N); var d:Date = new Date(); for(var j:int=0; j < 5; j++){ var a:Number = 0.1; var b:Number = 0.1; var diff:Number; getTime(); for(var i:int=0; i < N; i++){ diff = a - b; diff * diff; } log(getDiff()); } } public function getTime():Number{ t = new Date().time; return t; } public function getDiff():Number{ var t2:Number = new Date().time; var result:Number = t2 - t; t = t2; return result; } } }
さらに謎なのは、下のように書き換えるとスタックオーバーフローせずに実行されるようになること。
for(var i:int=0; i < N; i++){ diff = a - b; try{ diff * diff; }catch(e){ throw e; } }