Форум программистов, компьютерный форум CyberForum.ru

const float & - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Наведите на мысль http://www.cyberforum.ru/cpp-beginners/thread1008648.html
Добрый день) Изучаю Borland C++ по А. Крейгу, надо ввести данную программу(приведена ниже), после компиляции выводит ошибки: Unit1.cpp(31): E2316 'VmArray::VmArray(unsigned int,const char *)' is not a member of 'VmArray' Unit1.cpp(64): W8012 Comparing signed and unsigned values Unit1.cpp(94): E2285 Could not find a match for 'VmArray::VmArray(int,char *)' Не получается найти решение...
C++ Ввести строку из нескольких слов и найти в ней заданное слово Ввести строку из нескольких слов и найти в ней заданное слово( введённое с клавиатуры) вывести сколько раз оно встечается в строке. Не получается организовать цикл для поиска этого слова в строке http://www.cyberforum.ru/cpp-beginners/thread1008625.html
максимальный элемент главной диагонали матрицы C++
Помогите, какой должен быть код чтобы программа высчитывала максимальный элемент главной диагонали матрицы Х(5 на 5)
Динамические массивы/ Найти из каждых столбцов мах элемент C++
Дано динамические массивы,строков и столбцов внедрять с помощью клавиатуры.Найти из каждых столбцов мах элемент.Я написал половину программы,помогите закончить. #include <iostream> #include <ctime> #include <iomanip> using namespace std; int main(int argc, char* argv) {int n,m,count ; srand(time(0)); // генерация случайных чисел // динамическое создание двумерного массива...
C++ Определить, является ли сумма цифр этого числа простым числом http://www.cyberforum.ru/cpp-beginners/thread1008561.html
Помогите решить задание в С++ Дано натуральное число. Определить, является ли сумма цифр этого числа простым числом
C++ Сравнение двух двумерных массивов Всем привет ) Только начинаю работать с С++. Помогите разобраться с задачей, нужно сравнить два двумерных массива, то есть если в массивах есть совпадающие элементы (местоположение неважно) их нужно вывести на экран в виде одномерного массива например. Вот что у меня получилось #include <stdafx.h> #include <time.h> #include <iostream> using namespace std; void main() { подробнее

Показать сообщение отдельно
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
16.11.2013, 14:41     const float &
Цитата Сообщение от Evg Посмотреть сообщение
Когда параметров мало, то они передаются на регистрах, когда много - в стеке.
Увеличила число параметров до 52 (два английских алфавита), сейчас по значению быстрее.
Кликните здесь для просмотра всего текста

C++
#include <cstdio>
#include <ctime>
 
struct mat4 { float a[52]; };
 
/// По ссылке
mat4 __attribute__ ((noinline)) ref(
    const float &a, const float &b, const float &c, const float &d,
    const float &e, const float &f, const float &g, const float &h,
    const float &i, const float &j, const float &k, const float &l,
    const float &m, const float &n, const float &o, const float &p,
    const float &q, const float &r, const float &s, const float &t,
    const float &u, const float &v, const float &w, const float &x,
    const float &y, const float &z,
    const float &a1, const float &b1, const float &c1, const float &d1,
    const float &e1, const float &f1, const float &g1, const float &h1,
    const float &i1, const float &j1, const float &k1, const float &l1,
    const float &m1, const float &n1, const float &o1, const float &p1,
    const float &q1, const float &r1, const float &s1, const float &t1,
    const float &u1, const float &v1, const float &w1, const float &x1,
    const float &y1, const float &z1
) 
{ 
    mat4 mtrx;
    mtrx.a[ 0] = a; mtrx.a[ 1] = b; mtrx.a[ 2] = c; mtrx.a[ 3] = d; 
    mtrx.a[ 4] = e; mtrx.a[ 5] = f; mtrx.a[ 6] = g; mtrx.a[ 7] = h; 
    mtrx.a[ 8] = i; mtrx.a[ 9] = j; mtrx.a[10] = k; mtrx.a[11] = l; 
    mtrx.a[12] = m; mtrx.a[13] = n; mtrx.a[14] = o; mtrx.a[15] = p; 
    mtrx.a[16] = q; mtrx.a[17] = r; mtrx.a[18] = s; mtrx.a[19] = t; 
    mtrx.a[20] = u; mtrx.a[21] = v; mtrx.a[22] = w; mtrx.a[23] = x; 
    mtrx.a[24] = y; mtrx.a[25] = z;
    mtrx.a[26] = a1; mtrx.a[27] = b1; mtrx.a[28] = c1; mtrx.a[29] = d1; 
    mtrx.a[30] = e1; mtrx.a[31] = f1; mtrx.a[32] = g1; mtrx.a[33] = h1; 
    mtrx.a[34] = i1; mtrx.a[35] = j1; mtrx.a[36] = k1; mtrx.a[37] = l1; 
    mtrx.a[38] = m1; mtrx.a[39] = n1; mtrx.a[40] = o1; mtrx.a[41] = p1; 
    mtrx.a[42] = q1; mtrx.a[43] = r1; mtrx.a[44] = s1; mtrx.a[45] = t1; 
    mtrx.a[46] = u1; mtrx.a[47] = v1; mtrx.a[48] = w1; mtrx.a[49] = x1; 
    mtrx.a[50] = y1; mtrx.a[51] = z1;
    return mtrx; 
}
/// По значению
mat4 __attribute__ ((noinline)) val(
    float a, float b, float c, float d,
    float e, float f, float g, float h,
    float i, float j, float k, float l,
    float m, float n, float o, float p,
    float q, float r, float s, float t,
    float u, float v, float w, float x,
    float y, float z,   
    float a1, float b1, float c1, float d1,
    float e1, float f1, float g1, float h1,
    float i1, float j1, float k1, float l1,
    float m1, float n1, float o1, float p1,
    float q1, float r1, float s1, float t1,
    float u1, float v1, float w1, float x1,
    float y1, float z1  
) 
{ 
    mat4 mtrx;
    mtrx.a[ 0] = a; mtrx.a[ 1] = b; mtrx.a[ 2] = c; mtrx.a[ 3] = d; 
    mtrx.a[ 4] = e; mtrx.a[ 5] = f; mtrx.a[ 6] = g; mtrx.a[ 7] = h; 
    mtrx.a[ 8] = i; mtrx.a[ 9] = j; mtrx.a[10] = k; mtrx.a[11] = l; 
    mtrx.a[12] = m; mtrx.a[13] = n; mtrx.a[14] = o; mtrx.a[15] = p; 
    mtrx.a[16] = q; mtrx.a[17] = r; mtrx.a[18] = s; mtrx.a[19] = t; 
    mtrx.a[20] = u; mtrx.a[21] = v; mtrx.a[22] = w; mtrx.a[23] = x; 
    mtrx.a[24] = y; mtrx.a[25] = z;
    mtrx.a[26] = a1; mtrx.a[27] = b1; mtrx.a[28] = c1; mtrx.a[29] = d1; 
    mtrx.a[30] = e1; mtrx.a[31] = f1; mtrx.a[32] = g1; mtrx.a[33] = h1; 
    mtrx.a[34] = i1; mtrx.a[35] = j1; mtrx.a[36] = k1; mtrx.a[37] = l1; 
    mtrx.a[38] = m1; mtrx.a[39] = n1; mtrx.a[40] = o1; mtrx.a[41] = p1; 
    mtrx.a[42] = q1; mtrx.a[43] = r1; mtrx.a[44] = s1; mtrx.a[45] = t1; 
    mtrx.a[46] = u1; mtrx.a[47] = v1; mtrx.a[48] = w1; mtrx.a[49] = x1; 
    mtrx.a[50] = y1; mtrx.a[51] = z1;
    return mtrx; 
}
 
/*
// Указатель на функцию "по-ссылке"
mat4(*pref)(
    const float&,const float&,const float&,const float&,  
    const float&,const float&,const float&,const float&,  
    const float&,const float&,const float&,const float&,  
    const float&,const float&,const float&,const float&,
    const float&,const float&,const float&,const float&,
    const float&,const float&,const float&,const float&,
    const float&,const float&,
    const float&,const float&,const float&,const float&,  
    const float&,const float&,const float&,const float&,  
    const float&,const float&,const float&,const float&,  
    const float&,const float&,const float&,const float&,
    const float&,const float&,const float&,const float&,
    const float&,const float&,const float&,const float&,
    const float&,const float&
) = ref;
 
// Указатель на функцию "по-значению"
mat4(*pval)(
    float,float,float,float,  
    float,float,float,float,  
    float,float,float,float,  
    float,float,float,float,
    float,float,float,float,
    float,float,float,float,
    float,float,
    float,float,float,float,  
    float,float,float,float,  
    float,float,float,float,  
    float,float,float,float,
    float,float,float,float,
    float,float,float,float,
    float,float
) = val;
*/
 
// глобальная дата
clock_t T;
long N = 100000000;
double sc = 1000000.0;
 
float a = 0.0, b = 0.0, c = 0.0, d = 0.0;
float e = 0.0, f = 0.0, g = 0.0, h = 0.0;
float i = 0.0, j = 0.0, k = 0.0, l = 0.0;
float m = 0.0, n = 0.0, o = 0.0, p = 0.0;
float q = 0.0, r = 0.0, s = 0.0, t = 0.0;
float u = 0.0, v = 0.0, w = 0.0, x = 0.0;
float y = 0.0, z = 0.0;
 
float a1 = 0.0, b1 = 0.0, c1 = 0.0, d1 = 0.0;
float e1 = 0.0, f1 = 0.0, g1 = 0.0, h1 = 0.0;
float i1 = 0.0, j1 = 0.0, k1 = 0.0, l1 = 0.0;
float m1 = 0.0, n1 = 0.0, o1 = 0.0, p1 = 0.0;
float q1 = 0.0, r1 = 0.0, s1 = 0.0, t1 = 0.0;
float u1 = 0.0, v1 = 0.0, w1 = 0.0, x1 = 0.0;
float y1 = 0.0, z1 = 0.0;
 
 
 
int main()
{
    mat4 mref;
    mat4 mval;
 
    for(int g = 0; g < 4; g++)
    {
        T = clock();
        for(int i = 0; i < N; i++) mref = ref(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,q1,r1,s1,t1,u1,v1,w1,x1,y1,z1);
        T = clock() - T;
        printf("ref: %2.2f\t", T/sc);
 
        T = clock();
        for(int i = 0; i < N; i++) mval = val(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,q1,r1,s1,t1,u1,v1,w1,x1,y1,z1);
        T = clock() - T;
        printf("val: %2.2f\n", T/sc);
    }
}

Bash
user@linuxmint ~/Рабочий стол $ g++ test.cpp -otest -O3
user@linuxmint ~/Рабочий стол $ ./test
ref: 4.28   val: 3.63
ref: 4.26   val: 3.65
ref: 4.26   val: 3.63
ref: 4.27   val: 3.65
Добавлено через 9 минут
Цитата Сообщение от castaway Посмотреть сообщение
Хотя бы убери флаг -O3
А без флага вот так по ссылке снова быстрее:
Bash
user@linuxmint ~/Рабочий стол $ g++ test.cpp -otest
user@linuxmint ~/Рабочий стол $ ./test
ref: 7.77   val: 7.98
ref: 7.55   val: 7.98
ref: 7.56   val: 7.99
ref: 7.57   val: 7.98
 
Текущее время: 19:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru