Показать сообщение отдельно
Старый 08.05.2012, 14:20
Gantenbain вне форума Посмотреть профиль Отправить личное сообщение для Gantenbain Найти все сообщения от Gantenbain
  № 1  
Ответить с цитированием
Gantenbain

Регистрация: Jul 2011
Сообщений: 32
По умолчанию Вычисление корня в ActionScript vs. Haxe

Наткнулся на пост Nicolas Cannasse , тесты довольно старые, но встретились также и довольно свежие сравнительные тесты на ту же тему. А поскольку имею надобность посчитать изрядное количество корней, поставил Haxe SDK 2.09 (ранее с ним дела не имел) и попробовал воспроизвести увиденные у отмеченных авторов результаты. Однако, странным образом, скорость вычисления квадратного корня Нахе, в моих тестах, получается много ниже, чем у Math.sqrt() для Actionscript. Компилирую из под FlashDevelop:
Код AS3:
package ;
 
import flash.Lib;
import flash.Memory;
import flash.utils.ByteArray;
 
class Main 
{
 
	static function main() 
	{
	    	prepare();
	    	var i:Int = 0;
	    	var beginTime:Int = Lib.getTimer();
	    	var result:Float = 0;
            	while(i<1000000){
            	  result = rSqrt(1245);			
	    	  i++;
        	}		 
	    trace(Lib.getTimer() - beginTime);
	}
 
	public static function prepare():Void {
		var b:ByteArray = new ByteArray();
		b.length = 1024;
		Memory.select(b);
	}
 
	public static function rSqrt(x:Float): Float 
        {
		var original:Float = x;
		var half:Float = 0.5 * x;
		Memory.setFloat(0, x);
		var i:Int =Memory.getI32(0);
		i = 0x5f3759df - (i >> 1);
		Memory.setI32(0, i);
		x = Memory.getFloat(0);
		x = x * (1.5 - half * x * x);
		x = original * x;
		return x;
        }
}
Странно то, что скорость работы Math.sqrt() сравнима с указанной в последней статье, но корень из Haxe считается втрое медленнее (а не вдвое быстрее, чего, собственно, желалось).
выбор версии флеш-плеера для компилируемого проекта на скорость видимого влияния не оказывает. Тестил на 2-х ядерном AMD Athlon, 2Гб, 2ГГц. Отчего такое отличие результатов? Adobe улучшил свой расчет корня? Или я что-то в Нахе не понял?