очередной эксперемент по глумлению (над чем сами для себя решайте)
имеем : GNU GCC, контроллер lpc2148 и функцию f(a,x)=sqrt( fabs(cos( exp(a) + sin(log(x)))))
код на С
float func_c (float a , float x) { return sqrt( fabs(cos( exp(a) + sin(log(x))))); }
код на фортране
REAL FUNCTION FF(A,X) REAL A,X FF=SQRT(ABS(COS( EXP(A) + SIN(LOG(X))))); END FUNCTION FF
все это компиляется ( -Os )в один проект, заливается и запускается
выполняется кусок FIO1DIR |= _BV(24) ; while(1) { FIO1CLR |= _BV(24) ; res=ff_(&x,&y); FIO1SET |= _BV(24) ; res = func_c (x,y); }
на 24 пине мерятся импулсы осцилом итого на фртране 136 микросекунд на С 252 микросекунд результаты расчета верны для обоих вызовов. разница по скорости в 2 раза
ОДНАКО ЗАБАВНО!
вот думаю вычисления в циклах на фортране написать. почему нет? инструмент есть - нада пользоватся!
|