Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - prezek

Stran: 1 ... 10 11 [12] 13 14 ... 16
166
Vývoj / Re:Jak zamezit, aby byla funkce inline
« kdy: 23. 09. 2013, 14:35:30 »
díky

167
Vývoj / Jak zamezit, aby byla funkce inline
« kdy: 23. 09. 2013, 14:10:59 »
U mikrokontroleru potřebuju porovnávat 2 čísla (aktuální čas a čas události), která se mohou měnit v přerušení a problém je, když dojde k přerušení v době porovnávání čísel. Proto jsem chtěl porovnávání oddělit funkcí, která zajistí, že se budou proměnné načítat ve správném pořadí. Představa byla takováto:
1) načte se globální proměnná (čas události) z RAM do registru
2) registr se předá funkci k porovnání
3) funkce přebere parametr
4) načte z RAM do registru druhé číslo (aktuální čas v ms)
5) porovná registry a vrátí výsledek.
Problém je v tom, že funkce se mi překládá jako inline a překladač si vybírá jako optimální opačné načítání, než bych si jí přál a tak může dojít ke kolizi. Dá se to nějak vylepšit, aby se tomu zabránilo? (Napevno stanovit pořadí načítání, nebo zabránit aby se funkce vložila jako inline....)
Aktuálně používaná funkce pro zjištění uplynulého času:
Kód: [Vybrat]
u32 getDelay(u32 timeVal) {
    return cas - timeVal;
}

168
Vývoj / Re:šifrování hesla
« kdy: 18. 09. 2013, 14:52:43 »
tak to potom nemůže splňovat tento požadavek
- při každém šifrování řetězce/hesla vygeneroval jiný řetězec

Já to pochopil tak, že chce, aby mu po zašifrování/hashování řetězce "ahoj" vyšlo pokaždé něco jiného.

169
Vývoj / Re:šifrování hesla
« kdy: 18. 09. 2013, 14:02:02 »
A jak se potom prověří původní heslo, když poprvé hashuju se solí 132546, podruhé 345646546, potřetí 467654657 atd.. To se přenáší hash a sůl pro možnost zkontrolování? To by pak asi šlo, ale kdyby kontrolní algoritmus neznal původní heslo, nebo sůl se kterou bylo hashováno, tak by to nemohlo fungovat, že?

170
Vývoj / Re:šifrování hesla
« kdy: 18. 09. 2013, 13:09:58 »
O šifrování prakticky skoro nic nevím (kromě toho, že o šifrování moc neví ani Linus Torvalds), takže mě neberte moc vážně...
silná hashovací funkce (např. z rodiny SHA) + náhodný salt je to co hledáte
Pokud bude zasoleno náhodně, tak už to nijak nepůjde ověřit, ne?

Požadované podmínky by snad mohlo splnit libovolné šifrování rozšířením vstupního řetězce o náhodnou sekvenci znaků("Heslo"->"nahodnaDataDelkyTreba28ZnakuHeslo"->šifrování->pokaždéJináŠifra->dešifrování->"nahodnaDataDelkyTreba28ZnakuHeslo"->oříznutíPrvních28Znaků->"Heslo"). Samozřejmě to musí být zařízeno tak, aby se např. u blokové šifry vešlo vše do jednoho bloku apod.

171
Vývoj / Re:C++, použití free()
« kdy: 06. 09. 2013, 12:50:51 »
prezek:
... a je vazne videt, ze programovat moc neumite, jinak byste vyuzil ty ni,nj a nk promenne
Můžu se zeptat, jakou verzi Visual Studia a jaké nastavení překladače jsi použil? Ty časy jsou dost zoufalé. Hlavně by mě zajímalo nastavení optimalizací (/O...) a runtime testů (/RTC...).

Já říkal, že "neumím pořádně programovat"... :)
Chtěl jsem jen prověřit, že boost je blbost (tam, kde se dá nahradit *** a 6 řádky programu navíc) a po cca 10 minutách jsem viděl výsledek, který mě uspokojil. To, že ten výsledek neodpovídal realitě mi nevadilo. S nastavováním optimalizace jsem si hlavu nelámal a použil defaultní při založení nového projektu. Teď jsem zkusil jen přepnout profil debug(/Od) na release(/O2) a výsledek se otočil. Přesvědčili jste mě, boost zřejmě má smysl ve většině případů a třeba ho někdy taky využiju. Takže díky.

172
Vývoj / Re:C++, použití free()
« kdy: 06. 09. 2013, 09:02:29 »
Kód: [Vybrat]
#include "stdafx.h"
#include <time.h>
#define MULTI_ARRAY

#ifndef MULTI_ARRAY
#include "malloc.h"
#else
#include "boost/multi_array.hpp"
#endif
#include <cassert>

void fce() {
    int ni = 3, nj = 4, nk = 2;
#ifdef MULTI_ARRAY
    // Create a 3D array that is 3 x 4 x 2
    typedef boost::multi_array<double, 3> array_type;
    typedef array_type::index index;
    array_type A(boost::extents[ni][nj][nk]);
    index i, j, k;
#else

    double ***A;
    int i, j, k;
    A = (double***) malloc(ni * sizeof (double**));
    for (i = 0; i < ni; i++) {
        A[i] = (double**) malloc(nj * sizeof (double*));
        for (j = 0; j < nj; j++)
            A[i][j] = (double*) malloc(nk * sizeof (double));
    }
#endif
    // Assign values to the elements
    int values = 0;
    for (i = 0; i != 3; ++i)
        for (j = 0; j != 4; ++j)
            for (k = 0; k != 2; ++k)
                A[i][j][k] = values++;
    // Verify values
    int verify = 0;
    for (i = 0; i != 3; ++i)
        for (j = 0; j != 4; ++j)
            for (k = 0; k != 2; ++k)
                assert(A[i][j][k] == verify++);



#ifdef MULTI_ARRAY
#else
    for (i = 0; i < ni; i++) {
        for (j = 0; j < nj; j++)
            free(A[i][j]);
        free(A[i]);
    }
    free(A);
#endif
}

int _tmain(int argc, _TCHAR* argv[]) {
    time_t t0 = time(NULL);
    for (int i = 0; i < 500000; i++)fce();
    time_t t1 = time(NULL);
    printf("%d %d %d", (int) t0, (int) t1, (int) (t1 - t0));
    return 0;
}
Testováno Microsoft Visual Studio C++:
multi_array 28s
*** 5s
Jestli někomu vyjde multi_array rychlejší než *** s výrazným časovým rozdílem, tak dejte vědět.

PS: Ještě pořád nevím, co je špatného na "double ***A;", prosím o vysvětlení.

173
Studium a uplatnění / Re:Školství v ČR
« kdy: 06. 09. 2013, 08:49:58 »
V loni to vypadalo tak že když se nepřinesl úkol z matematiky, tak to nebyl problém, když se ale nepřineslo něco na výtvarku, tak to byl vážný prohřešek.
Bez úkolu z matiky se vyučovací hodina přežít dá, ale těžko budeš malovat košík s ovocem, když nemáš košík, ovoce jsi hodil z okna po školníkovi, ve štětci jsi nechal ztvrdnout barvu a tempery rodiče nekoupili, protože jsou to povrchně myslící ignoranti. Za jednu hodiny výtvarky se toho moc stihnout nedá, to pak trvá 3 týdny místo jednoho, než něco vznikne. Navíc děti po sobě neumí uklízet, takže hodina musí končit o 10 minut dříve, než před lety, protože učitelka musí deváťákům vysvětlovat, jak se myje štětec, že se hadra musí vyždímat...

174
Vývoj / Re:C++, použití free()
« kdy: 05. 09. 2013, 16:21:00 »
A co když zvládnu v jednom programu využít 11,7845%? To mě rovnou přijede pogratulovat ředitel NASA a nabídne mi práci? Není to náhodou spíše tak, že každý projekt je unikátní a u některých složitějších se vyplatí používat knihovny? A u některých jednoduchých s omezenou pamětí, výpočetním výkonem apod se vyplatí používat ***, vlastní definici funkce sinus, vlastni printf...? Zatím jste mě nepřesvědčili, že double *** p; je něco, za co by se měl jeho autor popravit, nebo minimálně chodit kanálama. Často se setkávám s tím, že bojuju o každý bajt programu, abych se vešel i s bootloaderem do 8 kB. Při použití multi_array je velikost programu 88kB, s *** má 40 kB. S multi_array jel testovací program 28s a s *** byl za 5s hotov. Co je úspornější z hlediska RAM jsem nezkoušel, ale odhaduju, že to bude s multi_array zase horší.

175
Studium a uplatnění / Re:Školství v ČR
« kdy: 05. 09. 2013, 10:17:08 »
Na některých školách (FIT VUT Brno) Ti děkan otevřeně řekne, že se jedná o výzkumnou instituci a studenti jsou vedlejší produkt
To mi přijde pořád lepší, než škola, která se chlubí tím, že na ní získáš M.Sc, M.A., MBA, Ph.D a mezinárodní akreditace. 

176
Vývoj / Re:C++, použití free()
« kdy: 05. 09. 2013, 09:59:31 »
boost::multi_array
http://www.boost.org/doc/libs/1_54_0/libs/multi_array/doc/user.html
A to jako vážně? Místo 6 řádků snad každému srozumitelného programu stahovat nějakou knihovnu s 373 MB? Ještě že neumím pořádně programovat, protože tohle není nic pro mě.

177
Vývoj / Re:C++, použití free()
« kdy: 05. 09. 2013, 08:44:41 »
Mimo to, spominane double ***p; si predstavim ako ukazatel na ukazatel na ukazatel na double. A to je uz same dost zahmlene. Interpretacia "pointer je pole" je dost nepriezracna a nevidim dovod, preco to pisat takto.

stačí se podívat pár řádků pod double ***p; a je jasné, že je to myšleno jako trojrozměrné pole. Jak vyrobit efektivněji 3D pole s přístupem k prvkům pomocí p
  • [y][z]?

178
Vývoj / Re:C++, použití free()
« kdy: 04. 09. 2013, 15:29:23 »
Mohli byste mi stručně říct, co je špatného na ukazateli na pole ukazatelů na pole doublů? Proč není tříhvězdičkový programátor kompliment?

179
Vývoj / Re:paralelní a sekvenční výpočty
« kdy: 13. 08. 2013, 16:47:07 »
Nijak do hloubky jsem to nezkoumal, ale myslím, že by to mělo jít. Můžeš mít zadrátované násobení mantis (s doplněnou jedničkou) a sčítání exponentů podobným způsobem jakou u sčítání a odčítání integerů, jen je potřeba v případě nutnosti výsledek součinu mantis vydělit 2 a exponent zvýšit. A taky je potřeba ošetřit speciální případy a chybové stavy. Některé procesory mají FPU, tak by se možná dalo dohledat, jak to provádí.

Stran: 1 ... 10 11 [12] 13 14 ... 16