Арифметика с плавающей точкой (п = 5000) fj=j. 18 fJ*J ¦ fk = fi + fj 26
fj = j. fk = fi - fj 27
fj-j: fk = fi * fj 24
fj»j. fk = fi / fj 78
Операции с массивами k - i + j 17
k = x[i] - j 18
k = i + x[j] 24
k = x[i] + x[jj 27
Операции с плавающей точкой начинаются с присваивания значения переменной] перемешюй fj. Эта операция занимает 8 не. Во внешнем цикле значение переменной i присваивается переменной fi. Операции с плавающей точкой выполняются почти так же быстро, как и целочисленные. Операции с массивами почти не требуют дополнительных затрат времени. Следующие примеры дают нам информацию о стоимости операторов ветвления и сравнения.
Сравнения (п = 5000)
1 f (i < J ) k + + 2 0
if ( x[i]<x[j]) k + + 2 5
Сравнения массивов и обмен элементов С п=5000 ) к = (х[1]<х[к]) ? -1 1 34 к = 1ntcmp(х+т , х +j ) 5 2
swapmac(i , j) 41
swapfunc( l . j) 65
Реализация сравнения и перестановки в виде функций стоит в среднем на 20 не дороже, чем реализация в явном виде. В разделе 9.2 сравнивается стоимость вычисления наибольшего из двух чисел с помощью функций, макросов и встроенного кода.
Функция, макрос и встроенный код для операции max (п=5000) к = (1 > j) ? 1 . j 26 к = maxmac(i , j ) 2 6 к = maxfunc( i , j ) 54
Функция rand оказалась на удивление дешевой (вспомните, однако, что функция bigrand вызывает ее дважды), извлечение квадратного корня стоит на порядок больше, чем основные арифметические операции (но всего вдвое дороже, чем операция деления), простые тригонометрические функции стоят еще в два раза больше, а сложные выполняются у лее за микросекунды.
Математические функции (п=10 00) k = rand() 4 0
fk=j+fi 20 fk=sqrt(j+fi) 188 fk = sin(j + f i ) 344 fk=sinh(j+fi) 2229 fk = asin(j + fi ) 973 fk=cos(j+fi) 353 fk = tan(j + fi) 465
Поскольку эти операции работают медленно, значение п пришлось уменьшить.
Выделение памяти стоит еще больше, поэтому мы уменьшаем п еще сильнее.
Выделение памяти (п=500) fгее(та 11 ос(16)) 2484 free(mal1ос( 100)) 3044
Опубликовал vovan666
April 17 2013 00:05:34 ·
0 Комментариев ·
3150 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.